summaryrefslogtreecommitdiff
path: root/mate-panel/launcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/launcher.c')
-rw-r--r--mate-panel/launcher.c81
1 files changed, 59 insertions, 22 deletions
diff --git a/mate-panel/launcher.c b/mate-panel/launcher.c
index ad2c147b..0385ccea 100644
--- a/mate-panel/launcher.c
+++ b/mate-panel/launcher.c
@@ -2,6 +2,7 @@
* MATE panel launcher module.
* (C) 1997,1998,1999,2000 The Free Software Foundation
* (C) 2000 Eazel, Inc.
+ * Copyright (C) 2012-2021 MATE Developers
*
* Authors: Miguel de Icaza
* Federico Mena
@@ -250,11 +251,11 @@ free_launcher (gpointer data)
if (launcher->key_file)
g_key_file_free (launcher->key_file);
- launcher->key_file = NULL;
- if (launcher->location != NULL)
- g_free (launcher->location);
- launcher->location = NULL;
+ g_free (launcher->location);
+
+ if (launcher->monitor != NULL)
+ g_object_unref (launcher->monitor);
g_free (launcher);
}
@@ -323,7 +324,6 @@ drag_leave_cb(GtkWidget *widget,
button_widget_set_dnd_highlight(BUTTON_WIDGET(widget), FALSE);
}
-
static gboolean
drag_motion_cb(GtkWidget *widget,
GdkDragContext *context,
@@ -368,7 +368,6 @@ enum {
TARGET_URI_LIST
};
-
static void
drag_data_get_cb (GtkWidget *widget,
GdkDragContext *context,
@@ -442,6 +441,7 @@ static Launcher *
create_launcher (const char *location)
{
GKeyFile *key_file;
+ g_autoptr(GFile) file = NULL;
gboolean loaded = FALSE;
Launcher *launcher;
GError *error = NULL;
@@ -501,6 +501,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);
@@ -516,6 +517,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),
@@ -525,15 +530,15 @@ create_launcher (const char *location)
gtk_drag_dest_set (GTK_WIDGET (launcher->button),
0, NULL, 0, 0);
- g_signal_connect (launcher->button, "drag_data_get",
+ g_signal_connect (launcher->button, "drag-data-get",
G_CALLBACK (drag_data_get_cb), launcher);
- g_signal_connect (launcher->button, "drag_data_received",
+ g_signal_connect (launcher->button, "drag-data-received",
G_CALLBACK (drag_data_received_cb), launcher);
- g_signal_connect (launcher->button, "drag_motion",
+ g_signal_connect (launcher->button, "drag-motion",
G_CALLBACK (drag_motion_cb), launcher);
- g_signal_connect (launcher->button, "drag_drop",
+ g_signal_connect (launcher->button, "drag-drop",
G_CALLBACK (drag_drop_cb), launcher);
- g_signal_connect (launcher->button, "drag_leave",
+ g_signal_connect (launcher->button, "drag-leave",
G_CALLBACK (drag_leave_cb), launcher);
g_signal_connect_swapped (launcher->button, "clicked",
G_CALLBACK (clicked_cb), launcher);
@@ -614,7 +619,6 @@ setup_button (Launcher *launcher)
else
str = g_strdup (comment);
-
/* If we can unescape the string, then we probably have an escaped
* string (a location e.g.). If we can't, then it most probably means
* we have a % that is not here to encode a character, and we don't
@@ -634,10 +638,8 @@ setup_button (Launcher *launcher)
/* Setup icon */
icon = panel_key_file_get_locale_string (launcher->key_file, "Icon");
- if (icon && icon[0] == '\0') {
- g_free (icon);
- icon = NULL;
- }
+ if (icon && icon[0] == '\0')
+ g_clear_pointer (&icon, g_free);
if (!icon) {
gchar *exec;
@@ -819,13 +821,13 @@ launcher_properties (Launcher *launcher)
g_signal_connect (launcher->prop_dialog, "changed",
G_CALLBACK (launcher_changed), launcher);
- g_signal_connect (launcher->prop_dialog, "command_changed",
+ g_signal_connect (launcher->prop_dialog, "command-changed",
G_CALLBACK (launcher_command_changed), launcher);
g_signal_connect (launcher->prop_dialog, "saved",
G_CALLBACK (launcher_saved), launcher);
- g_signal_connect (launcher->prop_dialog, "error_reported",
+ g_signal_connect (launcher->prop_dialog, "error-reported",
G_CALLBACK (launcher_error_reported), NULL);
g_signal_connect (launcher->prop_dialog, "destroy",
@@ -845,6 +847,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,
@@ -872,6 +902,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);
@@ -976,11 +1011,13 @@ ask_about_launcher (const char *file,
launcher_save_uri,
NULL);
- g_signal_connect (G_OBJECT (dialog), "saved",
- G_CALLBACK (launcher_new_saved), NULL);
+ g_signal_connect (dialog, "saved",
+ G_CALLBACK (launcher_new_saved),
+ NULL);
- g_signal_connect (G_OBJECT (dialog), "error_reported",
- G_CALLBACK (launcher_error_reported), NULL);
+ g_signal_connect (dialog, "error-reported",
+ G_CALLBACK (launcher_error_reported),
+ NULL);
gtk_window_set_screen (GTK_WINDOW (dialog),
gtk_widget_get_screen (GTK_WIDGET (panel)));