From 029582739a1f4335f7a3d9e4dbc910d197429123 Mon Sep 17 00:00:00 2001 From: Nick Schermer Date: Fri, 25 Feb 2011 18:01:25 +0100 Subject: [PATCH] Update tasklist monitor geometry on screen position changes (bug #7340). --- plugins/tasklist/tasklist-widget.c | 79 ++++++++++++++++++------------------ plugins/tasklist/tasklist-widget.h | 12 +++-- plugins/tasklist/tasklist.c | 34 +++++++++++---- 3 files changed, 71 insertions(+), 54 deletions(-) diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c index 658f56c..d5f2d6c 100644 --- a/plugins/tasklist/tasklist-widget.c +++ b/plugins/tasklist/tasklist-widget.c @@ -289,7 +289,6 @@ static void xfce_tasklist_skipped_windows_state_changed (WnckWi WnckWindowState new_state, XfceTasklist *tasklist); static void xfce_tasklist_sort (XfceTasklist *tasklist); -static void xfce_tasklist_update_monitor_geometry (XfceTasklist *tasklist); static gboolean xfce_tasklist_update_icon_geometries (gpointer data); static void xfce_tasklist_update_icon_geometries_destroyed (gpointer data); @@ -1448,10 +1447,6 @@ xfce_tasklist_gdk_screen_changed (GdkScreen *gdk_screen, { /* update the monitor geometry */ xfce_tasklist_update_monitor_geometry (tasklist); - - /* update visibility of buttons */ - xfce_tasklist_active_workspace_changed (tasklist->screen, - NULL, tasklist); } } @@ -1743,41 +1738,6 @@ xfce_tasklist_sort (XfceTasklist *tasklist) -static void -xfce_tasklist_update_monitor_geometry (XfceTasklist *tasklist) -{ - GdkScreen *screen; - gboolean geometry_set = FALSE; - GdkWindow *window; - - panel_return_if_fail (XFCE_IS_TASKLIST (tasklist)); - - if (!tasklist->all_monitors) - { - screen = gtk_widget_get_screen (GTK_WIDGET (tasklist)); - window = gtk_widget_get_window (GTK_WIDGET (tasklist)); - - if (G_LIKELY (screen != NULL - && window != NULL - && gdk_screen_get_n_monitors (screen) > 1)) - { - /* set the monitor geometry */ - gdk_screen_get_monitor_geometry (screen, - gdk_screen_get_monitor_at_window (screen, window), - &tasklist->monitor_geometry); - - geometry_set = TRUE; - } - } - - /* make sure we never poke the window geometry unneeded - * in the visibility function */ - if (!geometry_set) - xfce_tasklist_geometry_set_invalid (tasklist); -} - - - static gboolean xfce_tasklist_update_icon_geometries (gpointer data) { @@ -3725,3 +3685,42 @@ xfce_tasklist_set_size (XfceTasklist *tasklist, gtk_widget_queue_resize (GTK_WIDGET (tasklist)); } } + + + +void +xfce_tasklist_update_monitor_geometry (XfceTasklist *tasklist) +{ + GdkScreen *screen; + gboolean geometry_set = FALSE; + GdkWindow *window; + + panel_return_if_fail (XFCE_IS_TASKLIST (tasklist)); + + if (!tasklist->all_monitors) + { + screen = gtk_widget_get_screen (GTK_WIDGET (tasklist)); + window = gtk_widget_get_window (GTK_WIDGET (tasklist)); + + if (G_LIKELY (screen != NULL + && window != NULL + && gdk_screen_get_n_monitors (screen) > 1)) + { + /* set the monitor geometry */ + gdk_screen_get_monitor_geometry (screen, + gdk_screen_get_monitor_at_window (screen, window), + &tasklist->monitor_geometry); + + geometry_set = TRUE; + } + } + + /* make sure we never poke the window geometry unneeded + * in the visibility function */ + if (!geometry_set) + xfce_tasklist_geometry_set_invalid (tasklist); + + /* update visibility of buttons */ + xfce_tasklist_active_workspace_changed (tasklist->screen, + NULL, tasklist); +} diff --git a/plugins/tasklist/tasklist-widget.h b/plugins/tasklist/tasklist-widget.h index 20c5345..f1f6b11 100644 --- a/plugins/tasklist/tasklist-widget.h +++ b/plugins/tasklist/tasklist-widget.h @@ -62,13 +62,15 @@ enum _XfceTasklistSortOrder -GType xfce_tasklist_get_type (void) G_GNUC_CONST; +GType xfce_tasklist_get_type (void) G_GNUC_CONST; -void xfce_tasklist_set_orientation (XfceTasklist *tasklist, - GtkOrientation orientation); +void xfce_tasklist_set_orientation (XfceTasklist *tasklist, + GtkOrientation orientation); -void xfce_tasklist_set_size (XfceTasklist *tasklist, - gint size); +void xfce_tasklist_set_size (XfceTasklist *tasklist, + gint size); + +void xfce_tasklist_update_monitor_geometry (XfceTasklist *tasklist); G_END_DECLS diff --git a/plugins/tasklist/tasklist.c b/plugins/tasklist/tasklist.c index 0a235fb..e3c4f26 100644 --- a/plugins/tasklist/tasklist.c +++ b/plugins/tasklist/tasklist.c @@ -59,15 +59,17 @@ struct _TasklistPlugin -static void tasklist_plugin_construct (XfcePanelPlugin *panel_plugin); -static void tasklist_plugin_orientation_changed (XfcePanelPlugin *panel_plugin, - GtkOrientation orientation); -static gboolean tasklist_plugin_size_changed (XfcePanelPlugin *panel_plugin, - gint size); -static void tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin); -static gboolean tasklist_plugin_handle_expose_event (GtkWidget *widget, - GdkEventExpose *event, - TasklistPlugin *plugin); +static void tasklist_plugin_construct (XfcePanelPlugin *panel_plugin); +static void tasklist_plugin_orientation_changed (XfcePanelPlugin *panel_plugin, + GtkOrientation orientation); +static gboolean tasklist_plugin_size_changed (XfcePanelPlugin *panel_plugin, + gint size); +static void tasklist_plugin_screen_position_changed (XfcePanelPlugin *panel_plugin, + XfceScreenPosition position); +static void tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin); +static gboolean tasklist_plugin_handle_expose_event (GtkWidget *widget, + GdkEventExpose *event, + TasklistPlugin *plugin); @@ -85,6 +87,7 @@ tasklist_plugin_class_init (TasklistPluginClass *klass) plugin_class->construct = tasklist_plugin_construct; plugin_class->orientation_changed = tasklist_plugin_orientation_changed; plugin_class->size_changed = tasklist_plugin_size_changed; + plugin_class->screen_position_changed = tasklist_plugin_screen_position_changed; plugin_class->configure_plugin = tasklist_plugin_configure_plugin; } @@ -181,6 +184,19 @@ tasklist_plugin_size_changed (XfcePanelPlugin *panel_plugin, static void +tasklist_plugin_screen_position_changed (XfcePanelPlugin *panel_plugin, + XfceScreenPosition position) +{ + TasklistPlugin *plugin = XFCE_TASKLIST_PLUGIN (panel_plugin); + + /* update monitor geometry because this function is triggered on + * position changes of the panel, so also when moved to another screen */ + xfce_tasklist_update_monitor_geometry (XFCE_TASKLIST (plugin->tasklist)); +} + + + +static void tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin) { TasklistPlugin *plugin = XFCE_TASKLIST_PLUGIN (panel_plugin); -- 1.7.4.1