[gnome-applets/wip-geiger-task-item] fixup! window-picker: handle item lifecycle in TaskList
- From: Sebastian Geiger <segeiger src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets/wip-geiger-task-item] fixup! window-picker: handle item lifecycle in TaskList
- Date: Thu, 2 Apr 2020 21:27:45 +0000 (UTC)
commit cf2ec598c18ce61f5f4f110b436fe0e0836545ab
Author: Sebastian Geiger <sbastig gmx net>
Date: Thu Apr 2 23:26:41 2020 +0200
fixup! window-picker: handle item lifecycle in TaskList
gnome-applets/window-picker/task-item.c | 2 +
gnome-applets/window-picker/task-list.c | 78 ++++++++++++++++-----------------
2 files changed, 40 insertions(+), 40 deletions(-)
---
diff --git a/gnome-applets/window-picker/task-item.c b/gnome-applets/window-picker/task-item.c
index 143994dda..b190f447b 100644
--- a/gnome-applets/window-picker/task-item.c
+++ b/gnome-applets/window-picker/task-item.c
@@ -952,6 +952,8 @@ static void task_item_finalize (GObject *object) {
g_clear_object (&item->window);
G_OBJECT_CLASS (task_item_parent_class)->finalize (object);
+
+ g_print ("TaskItem finalized: %p\n", object);
}
static void task_item_class_init (TaskItemClass *klass) {
diff --git a/gnome-applets/window-picker/task-list.c b/gnome-applets/window-picker/task-list.c
index 393b4a518..28d331858 100644
--- a/gnome-applets/window-picker/task-list.c
+++ b/gnome-applets/window-picker/task-list.c
@@ -71,6 +71,14 @@ get_task_list_for_monitor (GdkMonitor *monitor)
return task_lists->data;
}
+static void on_task_item_closed (
+ TaskItem *item,
+ TaskList *list)
+{
+ gtk_container_remove (GTK_CONTAINER (list),
+ GTK_WIDGET (item));
+}
+
static GdkMonitor *
window_get_monitor (WnckWindow *window)
{
@@ -110,10 +118,17 @@ on_task_item_monitor_changed_cb (TaskItem *item,
on_task_item_monitor_changed_cb,
current_list);
+ g_signal_handlers_disconnect_by_func (item,
+ on_task_item_closed,
+ current_list);
+
gtk_container_add (GTK_CONTAINER (list), GTK_WIDGET (item));
- g_signal_connect (TASK_ITEM (item), "monitor-changed",
- G_CALLBACK (on_task_item_monitor_changed_cb), list);
+ g_signal_connect_object (TASK_ITEM (item), "task-item-closed",
+ G_CALLBACK (on_task_item_closed), list, 0);
+
+ g_signal_connect_object (TASK_ITEM (item), "monitor-changed",
+ G_CALLBACK (on_task_item_monitor_changed_cb), list, 0);
g_object_unref (item);
@@ -148,6 +163,10 @@ create_task_item (TaskList *taskList,
{
gtk_container_add (GTK_CONTAINER (taskList), item);
+ g_signal_connect_object (TASK_ITEM (item), "task-item-closed",
+ G_CALLBACK (on_task_item_closed),
+ taskList, 0);
+
g_signal_connect_object (TASK_ITEM (item), "monitor-changed",
G_CALLBACK (on_task_item_monitor_changed_cb),
taskList, 0);
@@ -156,20 +175,25 @@ create_task_item (TaskList *taskList,
return item;
}
-static void type_changed (WnckWindow *window,
- gpointer user_data)
+static void
+on_window_type_changed (WnckWindow *window,
+ TaskList *list)
{
- TaskList *taskList = TASK_LIST (user_data);
+ GtkWidget *item;
- if (!window_is_special (window))
- {
- GtkWidget * item;
+ if (window_is_special (window))
+ {
+ item = g_hash_table_lookup (list->items, window);
- item = create_task_item (taskList, window);
+ g_hash_table_remove(list->items, item);
+ }
+ else
+ {
+ item = create_task_item (list, window);
- if (item)
- g_hash_table_insert (taskList->items, window, item);
- }
+ if (item)
+ g_hash_table_insert (list->items, window, item);
+ }
}
static void
@@ -205,8 +229,8 @@ add_window (TaskList *list, WnckWindow *window)
{
GtkWidget *item;
- g_signal_connect_object (window, "type-changed", G_CALLBACK (type_changed),
- list, 0);
+ g_signal_connect_object (window, "type-changed",
+ G_CALLBACK (on_window_type_changed), list, 0);
if (window_is_special (window))
return NULL;
@@ -232,38 +256,12 @@ add_windows (TaskList *list)
}
}
-static void
-on_window_type_changed (WnckWindow *window,
- TaskList *list)
-{
- TaskItem *item;
- WnckWindowType type;
-
- item = g_hash_table_lookup (list->items, window);
-
- if (!item)
- 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)
- {
- g_hash_table_remove (list->items, item);
- }
-}
-
static void
on_window_opened (WnckScreen *screen,
WnckWindow *window,
TaskList *taskList)
{
add_window (taskList, window);
-
- g_signal_connect_object (window, "type-changed",
- G_CALLBACK (on_window_type_changed), taskList, 0);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]