Recognize custom commands with "application" preference proxies

Entering commands isn't possible yet but existing commands are
preserved and shown in the combo box.
This commit is contained in:
Christian Dywan 2009-11-02 22:02:16 +01:00
parent 4fbbc43e42
commit 219872aa8f

View file

@ -75,6 +75,21 @@ proxy_combo_box_text_changed_cb (GtkComboBox* button,
g_object_set (object, property, text, NULL); g_object_set (object, property, text, NULL);
} }
static const gchar*
katze_app_info_get_commandline (GAppInfo* info)
{
const gchar* exe;
#if GLIB_CHECK_VERSION (2, 20, 0)
exe = g_app_info_get_commandline (info);
#else
exe = g_object_get_data (G_OBJECT (info), "katze-cmdline");
#endif
if (!exe)
exe = g_app_info_get_executable (info);
return exe;
}
static void static void
proxy_combo_box_apps_changed_cb (GtkComboBox* button, proxy_combo_box_apps_changed_cb (GtkComboBox* button,
GObject* object) GObject* object)
@ -93,12 +108,7 @@ proxy_combo_box_apps_changed_cb (GtkComboBox* button,
if (info) if (info)
{ {
#if 0 /* GLIB_CHECK_VERSION (2, 20, 0) */ exe = katze_app_info_get_commandline (info);
/* FIXME: Implement non-trivial command lines */
exe = g_app_info_get_commandline (info);
#else
exe = g_app_info_get_executable (info);
#endif
g_object_set (object, property, exe, NULL); g_object_set (object, property, exe, NULL);
g_object_unref (info); g_object_unref (info);
} }
@ -467,16 +477,32 @@ katze_property_proxy (gpointer object,
gtk_list_store_insert_with_values (model, &iter, G_MAXINT, gtk_list_store_insert_with_values (model, &iter, G_MAXINT,
0, info, 1, icon_name, 2, name, -1); 0, info, 1, icon_name, 2, name, -1);
if (string && g_strrstr (g_app_info_get_executable (info), string)) if (string && !strcmp (katze_app_info_get_commandline (info), string))
gtk_combo_box_set_active_iter (combo, &iter); gtk_combo_box_set_active_iter (combo, &iter);
g_free (icon_name); g_free (icon_name);
} }
/* FIXME: Implement entering a custom command
gtk_list_store_insert_with_values (model, NULL, G_MAXINT,
0, NULL, 1, NULL, 2, _("Custom..."), -1); */
if (gtk_combo_box_get_active (combo) == -1) if (gtk_combo_box_get_active (combo) == -1)
{ {
if (string) if (string)
/* FIXME: Support custom command */; {
GtkTreeIter iter;
info = g_app_info_create_from_commandline (string,
NULL, G_APP_INFO_CREATE_NONE, NULL);
#if !GLIB_CHECK_VERSION (2, 20, 0)
g_object_set_data (G_OBJECT (info), "katze-cmdline");
#endif
gtk_list_store_insert_with_values (model, &iter, G_MAXINT,
0, info, 1, NULL, 2, string, -1);
gtk_combo_box_set_active_iter (combo, &iter);
g_object_unref (info);
}
else else
gtk_combo_box_set_active_iter (combo, &iter_none); gtk_combo_box_set_active_iter (combo, &iter_none);
} }