Commit bb7f3e0c authored by Giovanni Campagna's avatar Giovanni Campagna

GDesktopAppInfo: add an accessor for StartupWMClass

Components using GIO to do window to application matching can
use that field to retrieve potential candidates.

https://bugzilla.gnome.org/show_bug.cgi?id=673659
parent 79013634
...@@ -1463,6 +1463,7 @@ g_desktop_app_info_get_show_in ...@@ -1463,6 +1463,7 @@ g_desktop_app_info_get_show_in
g_desktop_app_info_get_generic_name g_desktop_app_info_get_generic_name
g_desktop_app_info_get_categories g_desktop_app_info_get_categories
g_desktop_app_info_get_keywords g_desktop_app_info_get_keywords
g_desktop_app_info_get_startup_wm_class
g_desktop_app_info_set_desktop_env g_desktop_app_info_set_desktop_env
GDesktopAppLaunchCallback GDesktopAppLaunchCallback
g_desktop_app_info_launch_uris_as_manager g_desktop_app_info_launch_uris_as_manager
......
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
#define GENERIC_NAME_KEY "GenericName" #define GENERIC_NAME_KEY "GenericName"
#define FULL_NAME_KEY "X-GNOME-FullName" #define FULL_NAME_KEY "X-GNOME-FullName"
#define KEYWORDS_KEY "Keywords" #define KEYWORDS_KEY "Keywords"
#define STARTUP_WM_CLASS_KEY "StartupWMClass"
enum { enum {
PROP_0, PROP_0,
...@@ -106,13 +107,13 @@ struct _GDesktopAppInfo ...@@ -106,13 +107,13 @@ struct _GDesktopAppInfo
char *binary; char *binary;
char *path; char *path;
char *categories; char *categories;
char *startup_wm_class;
guint nodisplay : 1; guint nodisplay : 1;
guint hidden : 1; guint hidden : 1;
guint terminal : 1; guint terminal : 1;
guint startup_notify : 1; guint startup_notify : 1;
guint no_fuse : 1; guint no_fuse : 1;
/* FIXME: what about StartupWMClass ? */
}; };
typedef enum { typedef enum {
...@@ -185,6 +186,7 @@ g_desktop_app_info_finalize (GObject *object) ...@@ -185,6 +186,7 @@ g_desktop_app_info_finalize (GObject *object)
g_free (info->binary); g_free (info->binary);
g_free (info->path); g_free (info->path);
g_free (info->categories); g_free (info->categories);
g_free (info->startup_wm_class);
G_OBJECT_CLASS (g_desktop_app_info_parent_class)->finalize (object); G_OBJECT_CLASS (g_desktop_app_info_parent_class)->finalize (object);
} }
...@@ -330,6 +332,7 @@ g_desktop_app_info_load_from_keyfile (GDesktopAppInfo *info, ...@@ -330,6 +332,7 @@ g_desktop_app_info_load_from_keyfile (GDesktopAppInfo *info,
info->no_fuse = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-GIO-NoFuse", NULL) != FALSE; info->no_fuse = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-GIO-NoFuse", NULL) != FALSE;
info->hidden = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL) != FALSE; info->hidden = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL) != FALSE;
info->categories = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_CATEGORIES, NULL); info->categories = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_CATEGORIES, NULL);
info->startup_wm_class = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, STARTUP_WM_CLASS_KEY, NULL);
info->icon = NULL; info->icon = NULL;
if (info->icon_name) if (info->icon_name)
...@@ -3394,3 +3397,24 @@ g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *loo ...@@ -3394,3 +3397,24 @@ g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *loo
} }
G_GNUC_END_IGNORE_DEPRECATIONS G_GNUC_END_IGNORE_DEPRECATIONS
/**
* g_desktop_app_info_get_startup_wm_class:
* @app_info: a #GDesktopAppInfo that supports startup notify
*
* Retrieves the StartupWMClass field from @app_info. This represents the
* WM_CLASS property of the main window of the application, if launched through
* @app_info.
*
* Returns: (transfer none): the startup WM class, or %NULL if none is set
* in the desktop file.
*
* Since: 2.34
*/
const char *
g_desktop_app_info_get_startup_wm_class (GDesktopAppInfo *app_info)
{
g_return_val_if_fail (G_IS_DESKTOP_APP_INFO (app_info), NULL);
return app_info->startup_wm_class;
}
...@@ -56,6 +56,8 @@ const char * const *g_desktop_app_info_get_keywords (GDesktopAppInfo *info); ...@@ -56,6 +56,8 @@ const char * const *g_desktop_app_info_get_keywords (GDesktopAppInfo *info);
gboolean g_desktop_app_info_get_nodisplay (GDesktopAppInfo *info); gboolean g_desktop_app_info_get_nodisplay (GDesktopAppInfo *info);
gboolean g_desktop_app_info_get_show_in (GDesktopAppInfo *info, gboolean g_desktop_app_info_get_show_in (GDesktopAppInfo *info,
const gchar *desktop_env); const gchar *desktop_env);
GLIB_AVAILABLE_IN_2_34
const char * g_desktop_app_info_get_startup_wm_class (GDesktopAppInfo *info);
GDesktopAppInfo *g_desktop_app_info_new (const char *desktop_id); GDesktopAppInfo *g_desktop_app_info_new (const char *desktop_id);
gboolean g_desktop_app_info_get_is_hidden (GDesktopAppInfo *info); gboolean g_desktop_app_info_get_is_hidden (GDesktopAppInfo *info);
......
...@@ -106,6 +106,7 @@ g_desktop_app_info_get_is_hidden ...@@ -106,6 +106,7 @@ g_desktop_app_info_get_is_hidden
g_desktop_app_info_get_keywords g_desktop_app_info_get_keywords
g_desktop_app_info_get_nodisplay g_desktop_app_info_get_nodisplay
g_desktop_app_info_get_show_in g_desktop_app_info_get_show_in
g_desktop_app_info_get_startup_wm_class
g_desktop_app_info_get_type g_desktop_app_info_get_type
g_desktop_app_info_launch_uris_as_manager g_desktop_app_info_launch_uris_as_manager
g_desktop_app_info_lookup_get_type g_desktop_app_info_lookup_get_type
......
...@@ -8,3 +8,5 @@ Comment=GAppInfo example ...@@ -8,3 +8,5 @@ Comment=GAppInfo example
Comment[de]=GAppInfo Beispiel Comment[de]=GAppInfo Beispiel
Exec=./appinfo-test --option Exec=./appinfo-test --option
Icon=testicon Icon=testicon
StartupNotify=true
StartupWMClass=appinfo-class
...@@ -273,6 +273,20 @@ test_environment (void) ...@@ -273,6 +273,20 @@ test_environment (void)
g_object_unref (ctx); g_object_unref (ctx);
} }
static void
test_startup_wm_class (void)
{
GDesktopAppInfo *appinfo;
const char *wm_class;
appinfo = g_desktop_app_info_new_from_filename (SRCDIR "/appinfo-test.desktop");
wm_class = g_desktop_app_info_get_startup_wm_class (appinfo);
g_assert_cmpstr (wm_class, ==, "appinfo-class");
g_object_unref (appinfo);
}
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
...@@ -288,6 +302,7 @@ main (int argc, char *argv[]) ...@@ -288,6 +302,7 @@ main (int argc, char *argv[])
g_test_add_func ("/appinfo/tryexec", test_tryexec); g_test_add_func ("/appinfo/tryexec", test_tryexec);
g_test_add_func ("/appinfo/associations", test_associations); g_test_add_func ("/appinfo/associations", test_associations);
g_test_add_func ("/appinfo/environment", test_environment); g_test_add_func ("/appinfo/environment", test_environment);
g_test_add_func ("/appinfo/startup-wm-class", test_startup_wm_class);
return g_test_run (); return g_test_run ();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment