[gnome-applets/wip/segeiger/type-changed: 1/2] windowpicker: listen to type-changed signal of WnckWindow



commit 328d04cce2b5bf373e1d5c96caa6e495f18bc88e
Author: Sebastian Geiger <sbastig gmx net>
Date:   Wed Dec 2 11:23:23 2015 +0100

    windowpicker: listen to type-changed signal of WnckWindow

 configure.ac                 |    2 +-
 windowpicker/src/task-item.c |   23 +++++++++++++++++++++
 windowpicker/src/task-list.c |   44 ++++++++++++++++++++++++++++++++++-------
 3 files changed, 60 insertions(+), 9 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 123c685..e23d8a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -64,7 +64,7 @@ GLIB_REQUIRED=2.44.0
 GIO_REQUIRED=2.26.0
 LIBPANEL_REQUIRED=3.18.0
 LIBGTOP_REQUIRED=2.11.92
-LIBWNCK_REQUIRED=2.91.0
+LIBWNCK_REQUIRED=3.14.1
 LIBNOTIFY_REQUIRED=0.7
 UPOWER_REQUIRED=0.9.4
 DBUS_REQUIRED=1.1.2
diff --git a/windowpicker/src/task-item.c b/windowpicker/src/task-item.c
index b5e6e32..d781486 100644
--- a/windowpicker/src/task-item.c
+++ b/windowpicker/src/task-item.c
@@ -466,6 +466,26 @@ static void on_window_icon_changed (WnckWindow *window, TaskItem *item) {
     gtk_widget_queue_draw (GTK_WIDGET (item));
 }
 
+static void
+on_window_type_changed (WnckWindow *window,
+                        TaskItem *item)
+{
+    WnckWindowType type;
+
+    if (item->priv->window != window)
+        return;
+
+    type = wnck_window_get_window_type (window);
+
+    if (type == WNCK_WINDOW_DESKTOP ||
+        type == WNCK_WINDOW_DOCK ||
+        type == WNCK_WINDOW_SPLASHSCREEN ||
+        type == WNCK_WINDOW_MENU)
+      {
+          task_item_close (item, window);
+      }
+}
+
 static void on_screen_active_window_changed (
     WnckScreen    *screen,
     WnckWindow    *old_window,
@@ -547,6 +567,7 @@ disconnect_window (TaskItem *item)
     g_signal_handlers_disconnect_by_func (window, on_window_state_changed,
                                           item);
     g_signal_handlers_disconnect_by_func (window, on_window_icon_changed, item);
+    g_signal_handlers_disconnect_by_func (window, on_window_type_changed, item);
 }
 
 static void
@@ -876,6 +897,8 @@ GtkWidget *task_item_new (WpApplet* windowPickerApplet, WnckWindow *window) {
         G_CALLBACK (on_window_state_changed), item);
     g_signal_connect (window, "icon-changed",
         G_CALLBACK (on_window_icon_changed), item);
+    g_signal_connect (window, "type-changed",
+        G_CALLBACK (on_window_type_changed), item);
     g_signal_connect(item, "draw",
         G_CALLBACK(task_item_draw), windowPickerApplet);
     g_signal_connect (item, "button-release-event",
diff --git a/windowpicker/src/task-list.c b/windowpicker/src/task-list.c
index 00bec88..fa965f2 100644
--- a/windowpicker/src/task-list.c
+++ b/windowpicker/src/task-list.c
@@ -42,12 +42,47 @@ static void on_task_item_closed (
     gtk_widget_destroy (GTK_WIDGET (item));
 }
 
+static void create_task_item (TaskList   *taskList,
+                              WnckWindow *window)
+{
+    GtkWidget *item;
+
+    item = task_item_new (taskList->priv->windowPickerApplet,
+                          window);
+
+    if (item)
+      {
+        gtk_container_add (GTK_CONTAINER (taskList), item);
+        g_signal_connect (TASK_ITEM (item), "task-item-closed",
+                          G_CALLBACK (on_task_item_closed), taskList);
+      }
+}
+
+static void type_changed (WnckWindow *window,
+                          gpointer user_data)
+{
+    TaskList *taskList = TASK_LIST (user_data);
+    WnckWindowType type = wnck_window_get_window_type (window);
+
+    if (!(type == WNCK_WINDOW_DESKTOP
+          || type == WNCK_WINDOW_DOCK
+          || type == WNCK_WINDOW_SPLASHSCREEN
+          || type == WNCK_WINDOW_MENU))
+      {
+        create_task_item (taskList, window);
+      }
+}
+
 static void on_window_opened (WnckScreen *screen,
     WnckWindow *window,
     TaskList *taskList)
 {
     g_return_if_fail (taskList != NULL);
     WnckWindowType type = wnck_window_get_window_type (window);
+
+    g_signal_connect (window, "type-changed", G_CALLBACK (type_changed),
+                      taskList);
+
     if (type == WNCK_WINDOW_DESKTOP
         || type == WNCK_WINDOW_DOCK
         || type == WNCK_WINDOW_SPLASHSCREEN
@@ -56,14 +91,7 @@ static void on_window_opened (WnckScreen *screen,
         return;
     }
 
-    GtkWidget *item = task_item_new (taskList->priv->windowPickerApplet, window);
-
-    if (item) {
-        //we add items dynamically to the end of the list
-        gtk_container_add(GTK_CONTAINER(taskList), item);
-        g_signal_connect (TASK_ITEM(item), "task-item-closed",
-                G_CALLBACK(on_task_item_closed), taskList);
-    }
+    create_task_item (taskList, window);
 }
 
 static void on_task_list_orient_changed(PanelApplet *applet,


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