void ask_about_launcher (const char *file, PanelWidget *panel, PanelObjectPackType pack_type) { GtkWidget *dialog; GKeyFile *key_file; if (panel_lockdown_get_disable_command_line_s ()) return; dialog = panel_ditem_editor_new (NULL, NULL, NULL, _("Create Launcher")); panel_widget_register_open_dialog (panel, dialog); key_file = panel_ditem_editor_get_key_file (PANEL_DITEM_EDITOR (dialog)); if (file != NULL) panel_key_file_set_string (key_file, "Exec", file); panel_key_file_set_string (key_file, "Type", "Application"); panel_ditem_editor_sync_display (PANEL_DITEM_EDITOR (dialog)); panel_ditem_register_save_uri_func (PANEL_DITEM_EDITOR (dialog), launcher_save_uri, NULL); g_signal_connect (G_OBJECT (dialog), "saved", G_CALLBACK (launcher_new_saved), NULL); g_signal_connect (G_OBJECT (dialog), "error_reported", G_CALLBACK (launcher_error_reported), NULL); gtk_window_set_screen (GTK_WINDOW (dialog), gtk_widget_get_screen (GTK_WIDGET (panel))); g_object_set_data (G_OBJECT (dialog), "pack-type", GINT_TO_POINTER (pack_type)); g_object_set_data (G_OBJECT (dialog), "panel", panel); gtk_widget_show (dialog); }
static char * launcher_save_uri (PanelDItemEditor *dialog, gpointer data) { GKeyFile *key_file; char *type; char *exec_or_uri; Launcher *launcher; char *new_uri; const char *uri; key_file = panel_ditem_editor_get_key_file (dialog); type = panel_key_file_get_string (key_file, "Type"); if (type && !strcmp (type, "Application")) exec_or_uri = panel_key_file_get_string (key_file, "Exec"); else if (type && !strcmp (type, "Link")) exec_or_uri = panel_key_file_get_string (key_file, "URL"); else exec_or_uri = panel_key_file_get_string (key_file, "Name"); g_free (type); launcher = (Launcher *) data; if (launcher) new_uri = panel_launcher_find_writable_uri (launcher->location, exec_or_uri); else new_uri = panel_launcher_find_writable_uri (NULL, exec_or_uri); g_free (exec_or_uri); uri = panel_ditem_editor_get_uri (dialog); if (!uri || (new_uri && strcmp (new_uri, uri))) return new_uri; g_free (new_uri); return NULL; }
static void panel_ditem_editor_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { PanelDItemEditor *dialog; g_return_if_fail (PANEL_IS_DITEM_EDITOR (object)); dialog = PANEL_DITEM_EDITOR (object); switch (prop_id) { case PROP_KEYFILE: g_value_set_pointer (value, panel_ditem_editor_get_key_file (dialog)); break; case PROP_URI: g_value_set_string (value, panel_ditem_editor_get_uri (dialog)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }