summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mate-panel/launcher.c41
-rw-r--r--mate-panel/launcher.h1
2 files changed, 42 insertions, 0 deletions
diff --git a/mate-panel/launcher.c b/mate-panel/launcher.c
index 3246c202..c16cc596 100644
--- a/mate-panel/launcher.c
+++ b/mate-panel/launcher.c
@@ -257,6 +257,8 @@ free_launcher (gpointer data)
g_free (launcher->location);
launcher->location = NULL;
+ if (launcher->monitor != NULL)
+ g_object_unref (launcher->monitor);
g_free (launcher);
}
@@ -443,6 +445,7 @@ static Launcher *
create_launcher (const char *location)
{
GKeyFile *key_file;
+ g_autoptr(GFile) file = NULL;
gboolean loaded = FALSE;
Launcher *launcher;
GError *error = NULL;
@@ -502,6 +505,7 @@ create_launcher (const char *location)
if (!new_location)
new_location = g_strdup (location);
+ file = g_file_new_for_path (new_location);
launcher = g_new0 (Launcher, 1);
@@ -517,6 +521,10 @@ create_launcher (const char *location)
FALSE,
PANEL_ORIENTATION_TOP);
+ launcher->monitor = g_file_monitor_file (file,
+ G_FILE_MONITOR_NONE,
+ NULL,
+ NULL);
gtk_widget_show (launcher->button);
/*gtk_drag_dest_set (GTK_WIDGET (launcher->button),
@@ -846,6 +854,34 @@ launcher_properties_enabled (void)
return TRUE;
}
+static void
+app_desktop_file_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ Launcher *launcher)
+{
+ if (event_type != G_FILE_MONITOR_EVENT_CHANGED &&
+ event_type != G_FILE_MONITOR_EVENT_CREATED)
+ {
+ return;
+ }
+
+ if (!strchr (launcher->location, G_DIR_SEPARATOR))
+ {
+ g_key_file_load_from_file (launcher->key_file, launcher->location,
+ G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+ NULL);
+ }
+ else
+ {
+ panel_key_file_load_from_uri (launcher->key_file, launcher->location,
+ G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+ NULL);
+ }
+ setup_button (launcher);
+}
+
static Launcher *
load_launcher_applet (const char *location,
PanelWidget *panel,
@@ -873,6 +909,11 @@ load_launcher_applet (const char *location,
panel_widget_set_applet_expandable (panel, GTK_WIDGET (launcher->button), FALSE, TRUE);
panel_widget_set_applet_size_constrained (panel, GTK_WIDGET (launcher->button), TRUE);
+ g_signal_connect (launcher->monitor,
+ "changed",
+ G_CALLBACK (app_desktop_file_changed),
+ launcher);
+
/* setup button according to ditem */
setup_button (launcher);
diff --git a/mate-panel/launcher.h b/mate-panel/launcher.h
index 97f87940..97ebf7d5 100644
--- a/mate-panel/launcher.h
+++ b/mate-panel/launcher.h
@@ -26,6 +26,7 @@ typedef struct {
char *location;
GKeyFile *key_file;
+ GFileMonitor *monitor;
GtkWidget *prop_dialog;
GSList *error_dialogs;