mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 17:56:17 +01:00
GApplication: add a "resource base path"
We don't use this for anything inside of GApplication yet, but Gtk is about to start using it to find various bits of the application (such as its menus, icons, etc.). By default, we form the base path from the application ID to end up with the familiar /org/example/app style. https://bugzilla.gnome.org/show_bug.cgi?id=722092
This commit is contained in:
parent
60226a0386
commit
cea9de93c8
@ -3016,6 +3016,9 @@ g_application_set_inactivity_timeout
|
||||
g_application_get_flags
|
||||
g_application_set_flags
|
||||
<SUBSECTION>
|
||||
g_application_get_resource_base_path
|
||||
g_application_set_resource_base_path
|
||||
<SUBSECTION>
|
||||
g_application_get_dbus_connection
|
||||
g_application_get_dbus_object_path
|
||||
<SUBSECTION>
|
||||
|
@ -212,6 +212,7 @@ struct _GApplicationPrivate
|
||||
{
|
||||
GApplicationFlags flags;
|
||||
gchar *id;
|
||||
gchar *resource_path;
|
||||
|
||||
GActionGroup *actions;
|
||||
GMenuModel *app_menu;
|
||||
@ -245,6 +246,7 @@ enum
|
||||
PROP_NONE,
|
||||
PROP_APPLICATION_ID,
|
||||
PROP_FLAGS,
|
||||
PROP_RESOURCE_BASE_PATH,
|
||||
PROP_IS_REGISTERED,
|
||||
PROP_IS_REMOTE,
|
||||
PROP_INACTIVITY_TIMEOUT,
|
||||
@ -1011,6 +1013,10 @@ g_application_set_property (GObject *object,
|
||||
g_application_set_flags (application, g_value_get_flags (value));
|
||||
break;
|
||||
|
||||
case PROP_RESOURCE_BASE_PATH:
|
||||
g_application_set_resource_base_path (application, g_value_get_string (value));
|
||||
break;
|
||||
|
||||
case PROP_INACTIVITY_TIMEOUT:
|
||||
g_application_set_inactivity_timeout (application,
|
||||
g_value_get_uint (value));
|
||||
@ -1078,6 +1084,10 @@ g_application_get_property (GObject *object,
|
||||
g_application_get_flags (application));
|
||||
break;
|
||||
|
||||
case PROP_RESOURCE_BASE_PATH:
|
||||
g_value_set_string (value, g_application_get_resource_base_path (application));
|
||||
break;
|
||||
|
||||
case PROP_IS_REGISTERED:
|
||||
g_value_set_boolean (value,
|
||||
g_application_get_is_registered (application));
|
||||
@ -1105,6 +1115,20 @@ g_application_constructed (GObject *object)
|
||||
|
||||
if (g_application_get_default () == NULL)
|
||||
g_application_set_default (application);
|
||||
|
||||
/* People should not set properties from _init... */
|
||||
g_assert (application->priv->resource_path == NULL);
|
||||
|
||||
if (application->priv->id != NULL)
|
||||
{
|
||||
gint i;
|
||||
|
||||
application->priv->resource_path = g_strconcat ("/", application->priv->id, NULL);
|
||||
|
||||
for (i = 1; application->priv->resource_path[i]; i++)
|
||||
if (application->priv->resource_path[i] == '.')
|
||||
application->priv->resource_path[i] = '/';
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1206,6 +1230,12 @@ g_application_class_init (GApplicationClass *class)
|
||||
G_TYPE_APPLICATION_FLAGS, G_APPLICATION_FLAGS_NONE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_RESOURCE_BASE_PATH,
|
||||
g_param_spec_string ("resource-base-path",
|
||||
P_("Resource base path"),
|
||||
P_("The base resource path for the application"),
|
||||
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_IS_REGISTERED,
|
||||
g_param_spec_boolean ("is-registered",
|
||||
P_("Is registered"),
|
||||
@ -1571,6 +1601,79 @@ g_application_set_flags (GApplication *application,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* g_application_get_resource_base_path:
|
||||
* @application: a #GApplication
|
||||
*
|
||||
* Gets the resource base path of @application.
|
||||
*
|
||||
* See g_application_set_resource_base_path() for more information.
|
||||
*
|
||||
* Returns: (nullable): the base resource path, if one is set
|
||||
*
|
||||
* Since: 2.42
|
||||
*/
|
||||
const gchar *
|
||||
g_application_get_resource_base_path (GApplication *application)
|
||||
{
|
||||
g_return_val_if_fail (G_IS_APPLICATION (application), NULL);
|
||||
|
||||
return application->priv->resource_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_application_set_resource_base_path:
|
||||
* @application: a #GApplication
|
||||
* @resource_path: (nullable): the resource path to use
|
||||
*
|
||||
* Sets (or unsets) the base resource path of @application.
|
||||
*
|
||||
* The path is used to automatically load various [application
|
||||
* resources][gresource] such as menu layouts and action descriptions.
|
||||
* The various types of resources will be found at fixed names relative
|
||||
* to the given base path.
|
||||
*
|
||||
* By default, the resource base path is determined from the application
|
||||
* ID by prefixing '/' and replacing each '.' with '/'. This is done at
|
||||
* the time that the #GApplication object is constructed. Changes to
|
||||
* the application ID after that point will not have an impact on the
|
||||
* resource base path.
|
||||
*
|
||||
* As an example, if the application has an ID of "org.example.app" then
|
||||
* the default resource base path will be "/org/example/app". If this
|
||||
* is a #GtkApplication (and you have not manually changed the path)
|
||||
* then Gtk will then search for the menus of the application at
|
||||
* "/org/example/app/gtk/menus.ui".
|
||||
*
|
||||
* See #GResource for more information about adding resources to your
|
||||
* application.
|
||||
*
|
||||
* You can disable automatic resource loading functionality by setting
|
||||
* the path to %NULL.
|
||||
*
|
||||
* Changing the resource base path once the application is running is
|
||||
* not recommended. The point at which the resource path is consulted
|
||||
* for forming paths for various purposes is unspecified.
|
||||
*
|
||||
* Since: 2.42
|
||||
*/
|
||||
void
|
||||
g_application_set_resource_base_path (GApplication *application,
|
||||
const gchar *resource_path)
|
||||
{
|
||||
g_return_if_fail (G_IS_APPLICATION (application));
|
||||
g_return_if_fail (resource_path == NULL || g_str_has_prefix (resource_path, "/"));
|
||||
|
||||
if (g_strcmp0 (application->priv->resource_path, resource_path) != 0)
|
||||
{
|
||||
g_free (application->priv->resource_path);
|
||||
|
||||
application->priv->resource_path = g_strdup (resource_path);
|
||||
|
||||
g_object_notify (G_OBJECT (application), "resource-base-path");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* g_application_get_inactivity_timeout:
|
||||
* @application: a #GApplication
|
||||
@ -1734,6 +1837,7 @@ g_application_get_dbus_object_path (GApplication *application)
|
||||
return g_application_impl_get_dbus_object_path (application->priv->impl);
|
||||
}
|
||||
|
||||
|
||||
/* Register {{{1 */
|
||||
/**
|
||||
* g_application_register:
|
||||
|
@ -155,6 +155,12 @@ GLIB_AVAILABLE_IN_ALL
|
||||
void g_application_set_flags (GApplication *application,
|
||||
GApplicationFlags flags);
|
||||
|
||||
GLIB_AVAILABLE_IN_2_42
|
||||
const gchar * g_application_get_resource_base_path (GApplication *application);
|
||||
GLIB_AVAILABLE_IN_2_42
|
||||
void g_application_set_resource_base_path (GApplication *application,
|
||||
const gchar *resource_base_path);
|
||||
|
||||
GLIB_DEPRECATED
|
||||
void g_application_set_action_group (GApplication *application,
|
||||
GActionGroup *action_group);
|
||||
|
Loading…
Reference in New Issue
Block a user