[gnome-applets/wip/segeiger/type-changed: 53/54] windowpicker: emit task-item-closed on window type-change



commit bea1abb5a2ec00f43cb7039cf08151a1746ec5be
Author: Sebastian Geiger <sbastig gmx net>
Date:   Fri Jan 22 13:41:12 2016 +0100

    windowpicker: emit task-item-closed on window type-change

 windowpicker/src/task-item.c |   51 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)
---
diff --git a/windowpicker/src/task-item.c b/windowpicker/src/task-item.c
index 126467a..ca178aa 100644
--- a/windowpicker/src/task-item.c
+++ b/windowpicker/src/task-item.c
@@ -78,6 +78,19 @@ static const GtkTargetEntry drag_types[] = {
 
 static const gint n_drag_types = G_N_ELEMENTS(drag_types);
 
+
+static void on_screen_window_closed (WnckScreen   *screen,
+                                     WnckWindow   *window,
+                                     TaskItem     *item);
+
+static void on_screen_active_window_changed (WnckScreen    *screen,
+                                             WnckWindow    *old_window,
+                                             TaskItem      *item);
+
+static void on_screen_active_workspace_changed (WnckScreen    *screen,
+                                                WnckWorkspace *old_workspace,
+                                                TaskItem      *taskItem);
+
 static void update_hints (TaskItem *item) {
     GtkWidget *parent, *widget;
     GtkAllocation allocation_parent, allocation_widget;
@@ -464,6 +477,39 @@ 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;
+    WnckScreen *screen;
+
+    type = wnck_window_get_window_type (window);
+    screen = item->priv->screen;
+
+    if (type == WNCK_WINDOW_DESKTOP ||
+        type == WNCK_WINDOW_DOCK ||
+        type == WNCK_WINDOW_SPLASHSCREEN ||
+        type == WNCK_WINDOW_MENU)
+      {
+          g_signal_handlers_disconnect_by_func (screen,
+                                                G_CALLBACK (on_screen_window_closed), item);
+          g_signal_handlers_disconnect_by_func (screen,
+                                                G_CALLBACK (on_screen_active_window_changed), item);
+          g_signal_handlers_disconnect_by_func (screen,
+                                                G_CALLBACK (on_screen_active_workspace_changed), item);
+          g_signal_handlers_disconnect_by_func (screen,
+                                                G_CALLBACK (on_screen_window_closed), item);
+          g_signal_handlers_disconnect_by_func (window,
+                                                G_CALLBACK (on_window_workspace_changed), item);
+          g_signal_handlers_disconnect_by_func (window,
+                                                G_CALLBACK (on_window_state_changed), item);
+          g_signal_emit (G_OBJECT (item),
+                         task_item_signals[TASK_ITEM_CLOSED_SIGNAL], 0);
+      }
+}
+
+
 static void on_screen_active_window_changed (
     WnckScreen    *screen,
     WnckWindow    *old_window,
@@ -521,6 +567,8 @@ static void on_screen_window_closed (
             G_CALLBACK (on_window_workspace_changed), item);
         g_signal_handlers_disconnect_by_func (window,
             G_CALLBACK (on_window_state_changed), item);
+        g_signal_handlers_disconnect_by_func (window,
+            G_CALLBACK (on_window_type_changed), item);
         g_signal_emit (G_OBJECT (item),
             task_item_signals[TASK_ITEM_CLOSED_SIGNAL], 0);
     }
@@ -730,6 +778,7 @@ task_item_dispose (GObject *object)
     g_signal_handlers_disconnect_by_func (task_item->priv->window, on_window_workspace_changed, task_item);
     g_signal_handlers_disconnect_by_func (task_item->priv->window, on_window_state_changed, task_item);
     g_signal_handlers_disconnect_by_func (task_item->priv->window, on_window_icon_changed, task_item);
+    g_signal_handlers_disconnect_by_func (task_item->priv->window, on_window_type_changed, task_item);
 
     G_OBJECT_CLASS (task_item_parent_class)->dispose (object);
 }
@@ -848,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",


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