mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-21 22:59:16 +02:00
GApplication: implement GActionMap
and deprecate g_application_set_action_group().
This commit is contained in:
parent
75f1802a1c
commit
088682d860
@ -25,8 +25,10 @@
|
|||||||
#include "gapplication.h"
|
#include "gapplication.h"
|
||||||
|
|
||||||
#include "gapplicationcommandline.h"
|
#include "gapplicationcommandline.h"
|
||||||
|
#include "gsimpleactiongroup.h"
|
||||||
#include "gapplicationimpl.h"
|
#include "gapplicationimpl.h"
|
||||||
#include "gactiongroup.h"
|
#include "gactiongroup.h"
|
||||||
|
#include "gactionmap.h"
|
||||||
#include "gmenumodel.h"
|
#include "gmenumodel.h"
|
||||||
#include "gsettings.h"
|
#include "gsettings.h"
|
||||||
|
|
||||||
@ -205,9 +207,10 @@ enum
|
|||||||
static guint g_application_signals[NR_SIGNALS];
|
static guint g_application_signals[NR_SIGNALS];
|
||||||
|
|
||||||
static void g_application_action_group_iface_init (GActionGroupInterface *);
|
static void g_application_action_group_iface_init (GActionGroupInterface *);
|
||||||
|
static void g_application_action_map_iface_init (GActionMapInterface *);
|
||||||
G_DEFINE_TYPE_WITH_CODE (GApplication, g_application, G_TYPE_OBJECT,
|
G_DEFINE_TYPE_WITH_CODE (GApplication, g_application, G_TYPE_OBJECT,
|
||||||
G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP,
|
G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, g_application_action_group_iface_init)
|
||||||
g_application_action_group_iface_init))
|
G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_MAP, g_application_action_map_iface_init))
|
||||||
|
|
||||||
/* vfunc defaults {{{1 */
|
/* vfunc defaults {{{1 */
|
||||||
static void
|
static void
|
||||||
@ -406,8 +409,8 @@ g_application_set_property (GObject *object,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_ACTION_GROUP:
|
case PROP_ACTION_GROUP:
|
||||||
g_application_set_action_group (application,
|
g_clear_object (&application->priv->actions);
|
||||||
g_value_get_object (value));
|
application->priv->actions = g_value_dup_object (value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_APP_MENU:
|
case PROP_APP_MENU:
|
||||||
@ -428,14 +431,14 @@ g_application_set_property (GObject *object,
|
|||||||
* @application: a #GApplication
|
* @application: a #GApplication
|
||||||
* @action_group: (allow-none): a #GActionGroup, or %NULL
|
* @action_group: (allow-none): a #GActionGroup, or %NULL
|
||||||
*
|
*
|
||||||
* Sets or unsets the group of actions associated with the application.
|
* This used to be how actions were associated with a #GApplication.
|
||||||
*
|
* Now there is #GActionMap for that.
|
||||||
* These actions can be invoked remotely.
|
|
||||||
*
|
|
||||||
* It is an error to call this function after the application has been
|
|
||||||
* registered.
|
|
||||||
*
|
*
|
||||||
* Since: 2.28
|
* Since: 2.28
|
||||||
|
*
|
||||||
|
* Deprecated:2.32:Use the #GActionMap interface instead. Never ever
|
||||||
|
* mix use of this API with use of #GActionMap on the same @application
|
||||||
|
* or things will go very badly wrong.
|
||||||
**/
|
**/
|
||||||
void
|
void
|
||||||
g_application_set_action_group (GApplication *application,
|
g_application_set_action_group (GApplication *application,
|
||||||
@ -645,6 +648,9 @@ g_application_finalize (GObject *object)
|
|||||||
if (application->priv->menubar)
|
if (application->priv->menubar)
|
||||||
g_object_unref (application->priv->menubar);
|
g_object_unref (application->priv->menubar);
|
||||||
|
|
||||||
|
if (application->priv->actions)
|
||||||
|
g_object_unref (application->priv->actions);
|
||||||
|
|
||||||
G_OBJECT_CLASS (g_application_parent_class)
|
G_OBJECT_CLASS (g_application_parent_class)
|
||||||
->finalize (object);
|
->finalize (object);
|
||||||
}
|
}
|
||||||
@ -655,6 +661,7 @@ g_application_init (GApplication *application)
|
|||||||
application->priv = G_TYPE_INSTANCE_GET_PRIVATE (application,
|
application->priv = G_TYPE_INSTANCE_GET_PRIVATE (application,
|
||||||
G_TYPE_APPLICATION,
|
G_TYPE_APPLICATION,
|
||||||
GApplicationPrivate);
|
GApplicationPrivate);
|
||||||
|
application->priv->actions = G_ACTION_GROUP (g_simple_action_group_new ());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -715,7 +722,7 @@ g_application_class_init (GApplicationClass *class)
|
|||||||
P_("Action group"),
|
P_("Action group"),
|
||||||
P_("The group of actions that the application exports"),
|
P_("The group of actions that the application exports"),
|
||||||
G_TYPE_ACTION_GROUP,
|
G_TYPE_ACTION_GROUP,
|
||||||
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_DEPRECATED | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_property (object_class, PROP_APP_MENU,
|
g_object_class_install_property (object_class, PROP_APP_MENU,
|
||||||
g_param_spec_object ("app-menu",
|
g_param_spec_object ("app-menu",
|
||||||
@ -1611,6 +1618,39 @@ g_application_activate_action (GActionGroup *action_group,
|
|||||||
action_name, parameter);
|
action_name, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GAction *
|
||||||
|
g_application_lookup_action (GActionMap *action_map,
|
||||||
|
const gchar *action_name)
|
||||||
|
{
|
||||||
|
GApplication *application = G_APPLICATION (action_map);
|
||||||
|
|
||||||
|
g_return_val_if_fail (G_IS_SIMPLE_ACTION_GROUP (application->priv->actions), NULL);
|
||||||
|
|
||||||
|
return g_simple_action_group_lookup (G_SIMPLE_ACTION_GROUP (application->priv->actions), action_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
g_application_add_action (GActionMap *action_map,
|
||||||
|
GAction *action)
|
||||||
|
{
|
||||||
|
GApplication *application = G_APPLICATION (action_map);
|
||||||
|
|
||||||
|
g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP (application->priv->actions));
|
||||||
|
|
||||||
|
g_simple_action_group_insert (G_SIMPLE_ACTION_GROUP (application->priv->actions), action);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
g_application_remove_action (GActionMap *action_map,
|
||||||
|
const gchar *action_name)
|
||||||
|
{
|
||||||
|
GApplication *application = G_APPLICATION (action_map);
|
||||||
|
|
||||||
|
g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP (application->priv->actions));
|
||||||
|
|
||||||
|
g_simple_action_group_remove (G_SIMPLE_ACTION_GROUP (application->priv->actions), action_name);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_application_action_group_iface_init (GActionGroupInterface *iface)
|
g_application_action_group_iface_init (GActionGroupInterface *iface)
|
||||||
{
|
{
|
||||||
@ -1620,6 +1660,14 @@ g_application_action_group_iface_init (GActionGroupInterface *iface)
|
|||||||
iface->activate_action = g_application_activate_action;
|
iface->activate_action = g_application_activate_action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
g_application_action_map_iface_init (GActionMapInterface *iface)
|
||||||
|
{
|
||||||
|
iface->lookup_action = g_application_lookup_action;
|
||||||
|
iface->add_action = g_application_add_action;
|
||||||
|
iface->remove_action = g_application_remove_action;
|
||||||
|
}
|
||||||
|
|
||||||
/* Default Application {{{1 */
|
/* Default Application {{{1 */
|
||||||
|
|
||||||
static GApplication *default_app;
|
static GApplication *default_app;
|
||||||
|
@ -148,6 +148,7 @@ GApplicationFlags g_application_get_flags (GApplic
|
|||||||
void g_application_set_flags (GApplication *application,
|
void g_application_set_flags (GApplication *application,
|
||||||
GApplicationFlags flags);
|
GApplicationFlags flags);
|
||||||
|
|
||||||
|
GLIB_DEPRECATED
|
||||||
void g_application_set_action_group (GApplication *application,
|
void g_application_set_action_group (GApplication *application,
|
||||||
GActionGroup *action_group);
|
GActionGroup *action_group);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user