[Xfce4-commits] <xfce4-panel:master> Set icon geometries for the tasklist buttons.
Nick Schermer
noreply at xfce.org
Sun Mar 28 18:24:02 CEST 2010
Updating branch refs/heads/master
to f6bda093df202543d93c2097ec74e22e361f8749 (commit)
from 66fa916a615e39d4c289a8a75a8086aa74bf116d (commit)
commit f6bda093df202543d93c2097ec74e22e361f8749
Author: Nick Schermer <nick at xfce.org>
Date: Sun Mar 28 18:10:55 2010 +0200
Set icon geometries for the tasklist buttons.
plugins/tasklist/tasklist-widget.c | 83 ++++++++++++++++++++++++++++++++++++
1 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/plugins/tasklist/tasklist-widget.c b/plugins/tasklist/tasklist-widget.c
index 8e33256..ab155ac 100644
--- a/plugins/tasklist/tasklist-widget.c
+++ b/plugins/tasklist/tasklist-widget.c
@@ -138,6 +138,9 @@ struct _XfceTasklist
* the tasklist */
guint show_wireframes : 1;
+ /* icon geometries update timeout */
+ guint update_icon_geometries_id;
+
/* button grouping mode */
XfceTasklistGrouping grouping;
@@ -232,6 +235,8 @@ static void xfce_tasklist_viewports_changed (WnckScreen *screen, XfceTasklist *t
static void xfce_tasklist_skipped_windows_state_changed (WnckWindow *window, WnckWindowState changed_state, WnckWindowState new_state, XfceTasklist *tasklist);
static void xfce_tasklist_sort (XfceTasklist *tasklist);
static GtkWidget *xfce_tasklist_get_panel_plugin (XfceTasklist *tasklist);
+static gboolean xfce_tasklist_update_icon_geometries (gpointer data);
+static void xfce_tasklist_update_icon_geometries_destroyed (gpointer data);
/* wireframe */
#ifdef GDK_WINDOWING_X11
@@ -439,6 +444,7 @@ xfce_tasklist_init (XfceTasklist *tasklist)
#ifdef GDK_WINDOWING_X11
tasklist->wireframe_window = 0;
#endif
+ tasklist->update_icon_geometries_id = 0;
tasklist->max_button_length = DEFAULT_MAX_BUTTON_LENGTH;
tasklist->min_button_length = DEFAULT_MIN_BUTTON_LENGTH;
tasklist->max_button_size = DEFAULT_BUTTON_SIZE;
@@ -590,6 +596,10 @@ xfce_tasklist_finalize (GObject *object)
panel_return_if_fail (tasklist->skipped_windows == NULL);
panel_return_if_fail (tasklist->screen == NULL);
+ /* stop icon geometry update timeout */
+ if (tasklist->update_icon_geometries_id != 0)
+ g_source_remove (tasklist->update_icon_geometries_id);
+
/* free the class group hash table */
g_hash_table_destroy (tasklist->class_groups);
@@ -923,6 +933,11 @@ xfce_tasklist_size_allocate (GtkWidget *widget,
gtk_widget_size_allocate (child->button, &child_alloc);
}
+
+ /* update icon geometries */
+ if (tasklist->update_icon_geometries_id == 0)
+ tasklist->update_icon_geometries_id = g_idle_add_full (G_PRIORITY_LOW, xfce_tasklist_update_icon_geometries,
+ tasklist, xfce_tasklist_update_icon_geometries_destroyed);
}
@@ -1574,6 +1589,74 @@ xfce_tasklist_get_panel_plugin (XfceTasklist *tasklist)
static gboolean
+xfce_tasklist_update_icon_geometries (gpointer data)
+{
+
+ XfceTasklist *tasklist = XFCE_TASKLIST (data);
+ GList *li;
+ XfceTasklistChild *child, *child2;
+ GtkAllocation *alloc;
+ GSList *lp;
+ gint root_x, root_y;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tasklist));
+ gtk_window_get_position (GTK_WINDOW (toplevel), &root_x, &root_y);
+
+ for (li = tasklist->windows; li != NULL; li = li->next)
+ {
+ child = li->data;
+
+ switch (child->type)
+ {
+ case CHILD_TYPE_WINDOW:
+ alloc = &child->button->allocation;
+ panel_return_val_if_fail (WNCK_IS_WINDOW (child->window), FALSE);
+ wnck_window_set_icon_geometry (child->window, alloc->x + root_x,
+ alloc->y + root_y, alloc->width,
+ alloc->height);
+ break;
+
+ case CHILD_TYPE_GROUP:
+ alloc = &child->button->allocation;
+ for (lp = child->windows; li != NULL; li = li->next)
+ {
+ child2 = lp->data;
+ panel_return_val_if_fail (WNCK_IS_WINDOW (child2->window), FALSE);
+ wnck_window_set_icon_geometry (child2->window, alloc->x + root_x,
+ alloc->y + root_y, alloc->width,
+ alloc->height);
+ }
+ break;
+
+ case CHILD_TYPE_OVERFLOW_MENU:
+ alloc = &tasklist->arrow_button->allocation;
+ panel_return_val_if_fail (WNCK_IS_WINDOW (child->window), FALSE);
+ wnck_window_set_icon_geometry (child->window, alloc->x + root_x,
+ alloc->y + root_y, alloc->width,
+ alloc->height);
+ break;
+
+ case CHILD_TYPE_GROUP_MENU:
+ /* we already handled those in the group button */
+ break;
+ };
+ }
+
+ return FALSE;
+}
+
+
+
+static void
+xfce_tasklist_update_icon_geometries_destroyed (gpointer data)
+{
+ XFCE_TASKLIST (data)->update_icon_geometries_id = 0;
+}
+
+
+
+static gboolean
xfce_tasklist_child_drag_motion_timeout (gpointer data)
{
XfceTasklistChild *child = data;
More information about the Xfce4-commits
mailing list