summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2006-07-08 17:47:22 -0400
committerKristian Høgsberg <krh@redhat.com>2006-07-08 17:47:22 -0400
commit6e1e33449b905bf74da6a62a94fb7b480072f269 (patch)
tree9add05f5cb77cacf259f679ec104d310dba8c4a6
parent420b48e001a0cbf1d51661ef4deba4979451561c (diff)
Update dock when launchers are added.
-rw-r--r--dock.c65
1 files changed, 59 insertions, 6 deletions
diff --git a/dock.c b/dock.c
index d5b620b..e4321f8 100644
--- a/dock.c
+++ b/dock.c
@@ -492,6 +492,14 @@ kiba_dock_add_launcher (KibaDock *dock, KibaLauncher *launcher, int x, int y)
launcher->object = object;
launcher->dock = dock;
+
+ if (GTK_WIDGET_REALIZED (GTK_WIDGET (dock)))
+ kiba_launcher_create_window (launcher);
+
+ if (GTK_WIDGET_MAPPED (GTK_WIDGET (dock)))
+ gdk_window_show (launcher->window);
+
+ kiba_dock_layout (dock);
}
static void
@@ -851,11 +859,11 @@ set_position_from_string (KibaDock *dock, const char *string)
printf ("invalid position\n");
}
-void
-key_changed_callback(GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
+static void
+options_changed_callback(GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ gpointer user_data)
{
KibaDock *dock;
const char *value;
@@ -877,6 +885,46 @@ key_changed_callback(GConfClient *client,
}
static void
+launchers_changed_callback(GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ gpointer user_data)
+{
+ KibaDock *dock;
+ KibaLauncher *launcher;
+ char *path, *last_slash;
+ GdkScreen *screen;
+ int width, height;
+
+ screen = gdk_screen_get_default ();
+ width = gdk_screen_get_width (screen);
+ height = gdk_screen_get_height (screen);
+
+ dock = KIBA_DOCK (user_data);
+
+ if (!g_str_has_suffix (entry->key, "/file"))
+ {
+ printf ("ignoring gconf event for %s\n", entry->key);
+ return;
+ }
+
+ path = g_strdup (entry->key);
+ last_slash = strrchr (path, '/');
+ *last_slash = '\0';
+ printf ("entry: key = %s, path = %s\n", entry->key, path);
+
+ launcher = kiba_launcher_new (dock, path);
+ g_free (path);
+
+ if (launcher == NULL)
+ return;
+
+ kiba_dock_add_launcher (dock, launcher,
+ g_random_int_range (0, width),
+ g_random_int_range (0, height));
+}
+
+static void
add_launchers (KibaDock *dock, GConfClient *gconf_client)
{
GSList *launchers, *l;
@@ -934,7 +982,12 @@ int main (int argc, char *argv[])
g_free (position);
gconf_client_notify_add(gconf_client, KIBA_GCONF_PATH "/options",
- key_changed_callback,
+ options_changed_callback,
+ dock,
+ NULL, &error);
+
+ gconf_client_notify_add(gconf_client, KIBA_GCONF_PATH "/launchers",
+ launchers_changed_callback,
dock,
NULL, &error);