[gnome-applets/wip/segeiger/type-changed: 3/4] task-list: Only show windows from list's monitor



commit c8a0a4c49980853c5cfa49608950c3a9ca2f7e3c
Author: Sebastian Geiger <sbastig gmx net>
Date:   Thu Jan 21 14:51:00 2016 +0100

    task-list: Only show windows from list's monitor
    
     * This patch makes a given tasklist ignore windows that
       are not on the same monitor as the tasklist, if there is more than one
       task list added to gnome-panel.

 windowpicker/src/task-list.c |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/windowpicker/src/task-list.c b/windowpicker/src/task-list.c
index 46680ef..672de37 100644
--- a/windowpicker/src/task-list.c
+++ b/windowpicker/src/task-list.c
@@ -29,6 +29,8 @@ struct _TaskListPrivate {
     WpApplet *windowPickerApplet;
 };
 
+static GSList *task_lists;
+
 G_DEFINE_TYPE_WITH_PRIVATE (TaskList, task_list, GTK_TYPE_BOX);
 
 static void on_task_item_closed (
@@ -46,6 +48,30 @@ static void create_task_item (TaskList   *taskList,
                               WnckWindow *window)
 {
     GtkWidget *item;
+    GdkScreen *gdk_screen;
+    GdkWindow *gdk_window;
+    gint list_monitor;
+    gint window_monitor;
+    gint x;
+    gint y;
+    gint w;
+    gint h;
+
+    if (g_slist_length (task_lists) > 1) {
+        gdk_window = gtk_widget_get_window (GTK_WIDGET (taskList));
+        gdk_screen = gtk_widget_get_screen (GTK_WIDGET (taskList));
+        list_monitor = gdk_screen_get_monitor_at_window (gdk_screen,
+                                                         gdk_window);
+
+        wnck_window_get_geometry (window, &x, &y, &w, &h);
+
+        window_monitor = gdk_screen_get_monitor_at_point (gdk_screen,
+                                                          x + w / 2,
+                                                          y + h / 2);
+
+        if (list_monitor != window_monitor)
+            return;
+    }
 
     item = task_item_new (taskList->priv->windowPickerApplet,
                                      window);
@@ -127,8 +153,7 @@ task_list_dispose (GObject *object)
 static void
 task_list_finalize (GObject *object)
 {
-    TaskList *task_list = TASK_LIST (object);
-    TaskListPrivate *priv = task_list->priv;
+    task_lists = g_slist_remove (task_lists, object);
 
     G_OBJECT_CLASS (task_list_parent_class)->finalize (object);
 }
@@ -168,6 +193,8 @@ GtkWidget *task_list_new (WpApplet *windowPickerApplet) {
                                        NULL
     );
 
+    task_lists = g_slist_append (task_lists, taskList);
+
     taskList->priv->windowPickerApplet = windowPickerApplet;
 
     g_signal_connect(PANEL_APPLET(windowPickerApplet), "change-orient",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]