xfdesktop: dealing with (fullscreen) low-res apps that screw up icon placement

Adam Glover masato529 at gmail.com
Mon Jan 11 22:28:17 CET 2010


On Sun, Dec 20, 2009 at 8:55 PM, Adam Glover <masato529 at gmail.com> wrote:
> I've noticed that the normal behavior of xfdesktop is not ideal
> for all situations.
>
> The problem in this case is that some applications which run in
> fullscreen, have a set resoution (or just lower maximum) than I run
> on my monitor.  This causes any arrangement of icons to get messed
> up as soon as the app resizes the screen.
>
> I could find no way to deal with this behavior so I modified xfdesktop.
> Was this necessary or is there some possible configuration I missed?
> (or is this already being dealt with in a develpment branch?)
>
> I am including my changes against xfdesktop4-4.6.1 so devs can get
> an idea as to what I did and perhaps comment on it.  If my changes
> seem bizarre, I apologize (I'm not terribly experienced with real coding)
> but it should give you an idea as to what I'd like to see in the program.
>
> I just set up an option that would cancel responses to desktop resizing
> and would be able to toggle it in a running instance.  It suits my needs
> but I don't know if there's a possiblity of having messed anything else
> up.
>
> Comments and suggestions are quite welcome.


Sorry, I'm new to the list so I don't want to be a pest but since I sent this
during the holidays, I fear perhaps nobody saw it (and based on other
response times I've seen here so far).

Also, I'm assuming we don't top-post in our replies.  Is that how everyone
does it on this list?


I'd appreciate any feedback anybody can provide on this issue.
Adam Glover



> --- xfdesktop4-4.6.1.orig/common/xfdesktop-common.h     2009-12-19
> 14:01:05.000000000 -0800
> +++ xfdesktop4-4.6.1/common/xfdesktop-common.h  2009-12-19
> 15:54:17.000000000 -0800
> @@ -37,6 +37,7 @@
>  #define DEFAULT_ICON_SIZE        32
>
>  #define LIST_TEXT                "# xfce backdrop list"
> +
>  #define XFDESKTOP_SELECTION_FMT  "XFDESKTOP_SELECTION_%d"
>  #define XFDESKTOP_IMAGE_FILE_FMT "XFDESKTOP_IMAGE_FILE_%d"
>
> @@ -44,6 +45,8 @@
>  #define MENU_MESSAGE       "menu"
>  #define WINDOWLIST_MESSAGE "windowlist"
>  #define QUIT_MESSAGE       "quit"
> +#define RESIZE_MESSAGE     "resizeyes"
> +#define NORESIZE_MESSAGE   "resizeno"
>
>  G_BEGIN_DECLS
>
> --- xfdesktop4-4.6.1.orig/src/main.c    2009-12-19 14:01:05.000000000 -0800
> +++ xfdesktop4-4.6.1/src/main.c 2009-12-19 15:54:17.000000000 -0800
> @@ -62,6 +62,7 @@
>
>  static SessionClient *client_session = NULL;
>  static gboolean is_session_managed = FALSE;
> +gboolean xfdesktop_noresize = FALSE;
>
>  static void
>  session_logout(void)
> @@ -188,6 +189,12 @@
>             }
>             gtk_main_quit();
>             return TRUE;
> +        } else if(!strcmp(RESIZE_MESSAGE, evt->data.b)) {
> +            xfdesktop_noresize = FALSE;
> +            return TRUE;
> +        } else if(!strcmp(NORESIZE_MESSAGE, evt->data.b)) {
> +            xfdesktop_noresize = TRUE;
> +            return TRUE;
>         }
>     }
>
> @@ -224,6 +231,7 @@
>     gboolean already_running;
>     gchar buf[1024];
>     GError *error = NULL;
> +    gboolean grid_message = FALSE;
>
>     /* bind gettext textdomain */
>     xfce_textdomain(GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
> @@ -286,6 +294,13 @@
>             message = QUIT_MESSAGE;
>         else if(!strcmp("--sm-client-id", argv[1])) {
>             /* do nothing */
> +        } else if(!strcmp("-resize", argument)) {
> +            message = RESIZE_MESSAGE;
> +            grid_message = TRUE;
> +        } else if(!strcmp("-noresize", argument)) {
> +            message = NORESIZE_MESSAGE;
> +            xfdesktop_noresize = TRUE;
> +            grid_message = TRUE;
>         } else {
>             g_printerr(_("%s: Unknown option: %s\n"), PACKAGE, argv[1]);
>             g_printerr(_("Options are:\n"));
> @@ -311,6 +326,16 @@
>
>     g_print("%s[%d]: starting up\n", PACKAGE, getpid());
>
> +    /* If resize/noresize was passed, send message if already running.
> +    Otherwise, just clear message as we're not doing anything with it */
> +    if(grid_message) {
> +        if(already_running) {
> +            xfdesktop_send_client_message(xid, message);
> +            return 0;
> +        }
> +        message = NULL;
> +    }
> +
>     if(message) {
>         if(!already_running)
>             g_printerr(_("%s is not running.\n"), PACKAGE);
> --- xfdesktop4-4.6.1.orig/src/xfdesktop-icon-view.c     2009-12-19
> 14:01:05.000000000 -0800
> +++ xfdesktop4-4.6.1/src/xfdesktop-icon-view.c  2009-12-19
> 16:02:53.000000000 -0800
> @@ -2299,6 +2299,9 @@
>  static void
>  xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
>  {
> +    /* If we disabled resizing, short-circuit the whole thing. */
> +    if(xfdesktop_noresize) return;
> +
>     GList *l, *leftovers = NULL;
>
>     /* move all icons into the pending_icons list */
> --- xfdesktop4-4.6.1.orig/src/xfdesktop-icon-view.h     2009-12-19
> 14:01:05.000000000 -0800
> +++ xfdesktop4-4.6.1/src/xfdesktop-icon-view.h  2009-12-19
> 16:00:01.000000000 -0800
> @@ -56,6 +56,8 @@
>     void (*icon_activated)(XfdesktopIconView *icon_view);
>  };
>
> +extern gboolean xfdesktop_noresize;
> +
>  GType xfdesktop_icon_view_get_type() G_GNUC_CONST;
>
>  GtkWidget *xfdesktop_icon_view_new(XfdesktopIconViewManager *manager);
> Only in xfdesktop4: xfdesktop.spec
>



More information about the Xfce4-dev mailing list