[Xfce4-commits] <xfwm4:master> Watch workspace changes in wnck and update treeview accordingly.
Nick Schermer
noreply at xfce.org
Tue Aug 3 22:44:01 CEST 2010
Updating branch refs/heads/master
to a5ef67a493254b9a1f0feb2f72f789872e1cea8c (commit)
from ebaba86402a99d57bf6352076e19375752a45fdd (commit)
commit a5ef67a493254b9a1f0feb2f72f789872e1cea8c
Author: Nick Schermer <nick at xfce.org>
Date: Tue Aug 3 22:42:15 2010 +0200
Watch workspace changes in wnck and update treeview accordingly.
settings-dialogs/workspace-settings.c | 102 ++++++++++++++++++---------------
1 files changed, 56 insertions(+), 46 deletions(-)
diff --git a/settings-dialogs/workspace-settings.c b/settings-dialogs/workspace-settings.c
index ecb16f1..3313045 100644
--- a/settings-dialogs/workspace-settings.c
+++ b/settings-dialogs/workspace-settings.c
@@ -38,6 +38,7 @@
#define WORKSPACES_CHANNEL "xfwm4"
#define WORKSPACE_NAMES_PROP "/general/workspace_names"
+#define WORKSPACE_COUNT_PROP "/general/workspace_count"
static GdkNativeWindow opt_socket_id = 0;
static gboolean opt_version = FALSE;
@@ -142,32 +143,17 @@ treeview_ws_names_cell_edited (GtkCellRendererText *cell,
static void
-xfconf_workspace_names_changed(XfconfChannel *channel,
- const gchar *property,
- const GValue *value,
- gpointer user_data)
+xfconf_workspace_names_update(GPtrArray *names,
+ GtkTreeView *treeview)
{
- GtkTreeView *treeview = user_data;
GtkTreeModel *model = gtk_tree_view_get_model(treeview);
WnckScreen *screen = wnck_screen_get_default();
guint i, n_workspaces;
- GPtrArray *names;
GtkTreePath *path;
GtkTreeIter iter;
- if(G_VALUE_TYPE(value) != dbus_g_type_get_collection("GPtrArray",
- G_TYPE_VALUE))
- {
- g_warning("(workspace names) Expected boxed GPtrArray property, got %s",
- G_VALUE_TYPE_NAME(value));
- return;
- }
-
- names = g_value_get_boxed(value);
- if(!names)
- return;
+ g_return_if_fail(GTK_IS_TREE_VIEW(treeview));
- wnck_screen_force_update(screen);
n_workspaces = wnck_screen_get_workspace_count(screen);
for(i = 0; i < n_workspaces && i < names->len; ++i) {
GValue *val = g_ptr_array_index(names, i);
@@ -214,6 +200,50 @@ xfconf_workspace_names_changed(XfconfChannel *channel,
gtk_tree_path_free(path);
}
+
+
+static void
+xfconf_workspace_names_changed(XfconfChannel *channel,
+ const gchar *property,
+ const GValue *value,
+ gpointer user_data)
+{
+ GPtrArray *names;
+
+ if(G_VALUE_TYPE(value) != dbus_g_type_get_collection("GPtrArray",
+ G_TYPE_VALUE))
+ {
+ g_warning("(workspace names) Expected boxed GPtrArray property, got %s",
+ G_VALUE_TYPE_NAME(value));
+ return;
+ }
+
+ names = g_value_get_boxed(value);
+ if(!names)
+ return;
+
+ xfconf_workspace_names_update(names, user_data);
+}
+
+
+
+static void
+workspace_dialog_count_changed(GtkTreeView *treeview)
+{
+ GPtrArray *names;
+ XfconfChannel *channel;
+
+ channel = xfconf_channel_get(WORKSPACES_CHANNEL);
+
+ names = xfconf_channel_get_arrayv (channel, WORKSPACE_NAMES_PROP);
+ if(names != NULL)
+ {
+ xfconf_workspace_names_update(names, treeview);
+ xfconf_array_free(names);
+ }
+}
+
+
static void
workspace_dialog_setup_names_treeview(GtkBuilder *builder,
XfconfChannel *channel)
@@ -223,9 +253,6 @@ workspace_dialog_setup_names_treeview(GtkBuilder *builder,
GtkCellRenderer *render;
GtkTreeViewColumn *col;
WnckScreen *screen;
- gint n_workspaces, i;
- GtkTreeIter iter;
- gchar **names;
dialog = GTK_WIDGET (gtk_builder_get_object(builder, "change_name_dialog"));
g_object_set_data(G_OBJECT(dialog), "name-entry",
@@ -236,6 +263,7 @@ workspace_dialog_setup_names_treeview(GtkBuilder *builder,
treeview = GTK_WIDGET (gtk_builder_get_object(builder, "treeview_ws_names"));
ls = gtk_list_store_new(N_COLS, G_TYPE_INT, G_TYPE_STRING);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(ls));
render = gtk_cell_renderer_text_new();
col = gtk_tree_view_column_new_with_attributes("", render,
@@ -258,33 +286,15 @@ workspace_dialog_setup_names_treeview(GtkBuilder *builder,
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
screen = wnck_screen_get_default();
- wnck_screen_force_update(screen);
- names = xfconf_channel_get_string_list(channel, WORKSPACE_NAMES_PROP);
+ wnck_screen_force_update (screen);
- n_workspaces = wnck_screen_get_workspace_count(screen);
- i = 0;
- if (names) {
- for(; i < n_workspaces && names[i]; ++i) {
- gtk_list_store_append(ls, &iter);
- gtk_list_store_set(ls, &iter,
- COL_NUMBER, i + 1,
- COL_NAME, names[i],
- -1);
- }
- }
- for(; i < n_workspaces; ++i) {
- WnckWorkspace *space = wnck_screen_get_workspace(screen, i);
- const char *name = wnck_workspace_get_name(space);
-
- gtk_list_store_append(ls, &iter);
- gtk_list_store_set(ls, &iter,
- COL_NUMBER, i + 1,
- COL_NAME, name,
- -1);
- }
- g_strfreev(names);
+ workspace_dialog_count_changed (GTK_TREE_VIEW (treeview));
- gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(ls));
+ /* watch ws count changes */
+ g_signal_connect_swapped(G_OBJECT(screen), "workspace-created",
+ G_CALLBACK (workspace_dialog_count_changed), treeview);
+ g_signal_connect_swapped(G_OBJECT(screen), "workspace-destroyed",
+ G_CALLBACK (workspace_dialog_count_changed), treeview);
g_signal_connect(G_OBJECT(channel),
"property-changed::" WORKSPACE_NAMES_PROP,
More information about the Xfce4-commits
mailing list