mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-25 15:00:41 +02:00
GApplication: fill in action group implementation
This commit is contained in:
parent
491641cf01
commit
3fe94ca9e9
@ -38,7 +38,7 @@ struct _GApplicationPrivate
|
|||||||
GApplicationFlags flags;
|
GApplicationFlags flags;
|
||||||
gchar *id;
|
gchar *id;
|
||||||
|
|
||||||
GHashTable *actions; /* string -> GApplicationAction */
|
GActionGroup *actions;
|
||||||
GMainLoop *mainloop;
|
GMainLoop *mainloop;
|
||||||
|
|
||||||
guint inactivity_timeout_id;
|
guint inactivity_timeout_id;
|
||||||
@ -58,7 +58,8 @@ enum
|
|||||||
PROP_FLAGS,
|
PROP_FLAGS,
|
||||||
PROP_IS_REGISTERED,
|
PROP_IS_REGISTERED,
|
||||||
PROP_IS_REMOTE,
|
PROP_IS_REMOTE,
|
||||||
PROP_INACTIVITY_TIMEOUT
|
PROP_INACTIVITY_TIMEOUT,
|
||||||
|
PROP_ACTION_GROUP
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -278,11 +279,46 @@ g_application_set_property (GObject *object, guint prop_id,
|
|||||||
g_value_get_uint (value));
|
g_value_get_uint (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_ACTION_GROUP:
|
||||||
|
g_application_set_action_group (application,
|
||||||
|
g_value_get_object (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_application_set_action_group:
|
||||||
|
* @application: a #GApplication
|
||||||
|
* @action_group: a #GActionGroup, or %NULL
|
||||||
|
*
|
||||||
|
* Sets or unsets the group of actions associated with the application.
|
||||||
|
*
|
||||||
|
* These actions are the actions that can be remotely invoked.
|
||||||
|
*
|
||||||
|
* It is an error to call this function after the application has been
|
||||||
|
* registered.
|
||||||
|
*
|
||||||
|
* Since: 2.28
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
g_application_set_action_group (GApplication *application,
|
||||||
|
GActionGroup *action_group)
|
||||||
|
{
|
||||||
|
g_return_if_fail (G_IS_APPLICATION (application));
|
||||||
|
g_return_if_fail (application->priv->is_registered);
|
||||||
|
|
||||||
|
if (application->priv->actions != NULL)
|
||||||
|
g_object_unref (application->priv->actions);
|
||||||
|
|
||||||
|
application->priv->actions = action_group;
|
||||||
|
|
||||||
|
if (application->priv->actions != NULL)
|
||||||
|
g_object_ref (application->priv->actions);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_application_get_property (GObject *object, guint prop_id,
|
g_application_get_property (GObject *object, guint prop_id,
|
||||||
GValue *value, GParamSpec *pspec)
|
GValue *value, GParamSpec *pspec)
|
||||||
@ -410,8 +446,13 @@ g_application_class_init (GApplicationClass *class)
|
|||||||
g_object_class_install_property (object_class, PROP_INACTIVITY_TIMEOUT,
|
g_object_class_install_property (object_class, PROP_INACTIVITY_TIMEOUT,
|
||||||
g_param_spec_boolean ("inactivity-timeout", "inactivity timeout",
|
g_param_spec_boolean ("inactivity-timeout", "inactivity timeout",
|
||||||
"time (ms) to stay alive after becoming idle",
|
"time (ms) to stay alive after becoming idle",
|
||||||
0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (object_class, PROP_ACTION_GROUP,
|
||||||
|
g_param_spec_object ("action-group", "action group",
|
||||||
|
"the group of actions that the application exports",
|
||||||
|
G_TYPE_ACTION_GROUP,
|
||||||
|
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_application_signals[SIGNAL_STARTUP] =
|
g_application_signals[SIGNAL_STARTUP] =
|
||||||
g_signal_new ("startup", G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
|
g_signal_new ("startup", G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
|
||||||
@ -1083,48 +1124,92 @@ static gboolean
|
|||||||
g_application_has_action (GActionGroup *action_group,
|
g_application_has_action (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return FALSE;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, FALSE);
|
||||||
|
|
||||||
|
return application->priv->actions &&
|
||||||
|
g_action_group_has_action (application->priv->actions, action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static gchar **
|
||||||
g_application_list_actions (GActionGroup *action_group)
|
g_application_list_actions (GActionGroup *action_group)
|
||||||
{
|
{
|
||||||
return NULL;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, NULL);
|
||||||
|
|
||||||
|
if (application->priv->actions != NULL)
|
||||||
|
return g_action_group_list_actions (application->priv->actions);
|
||||||
|
|
||||||
|
else
|
||||||
|
/* empty string array */
|
||||||
|
return g_new0 (gchar *, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
g_application_get_action_enabled (GActionGroup *action_group,
|
g_application_get_action_enabled (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return FALSE;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->actions != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, FALSE);
|
||||||
|
|
||||||
|
return g_action_group_get_action_enabled (application->priv->actions,
|
||||||
|
action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const GVariantType *
|
static const GVariantType *
|
||||||
g_application_get_action_parameter_type (GActionGroup *action_group,
|
g_application_get_action_parameter_type (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return NULL;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->actions != NULL, NULL);
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, NULL);
|
||||||
|
|
||||||
|
return g_action_group_get_action_parameter_type (application->priv->actions,
|
||||||
|
action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const GVariantType *
|
static const GVariantType *
|
||||||
g_application_get_action_state_type (GActionGroup *action_group,
|
g_application_get_action_state_type (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return NULL;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->actions != NULL, NULL);
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, NULL);
|
||||||
|
|
||||||
|
return g_action_group_get_action_state_type (application->priv->actions,
|
||||||
|
action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GVariant *
|
static GVariant *
|
||||||
g_application_get_action_state_hint (GActionGroup *action_group,
|
g_application_get_action_state_hint (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return NULL;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->actions != NULL, NULL);
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, NULL);
|
||||||
|
|
||||||
|
return g_action_group_get_action_state_hint (application->priv->actions,
|
||||||
|
action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GVariant *
|
static GVariant *
|
||||||
g_application_get_action_state (GActionGroup *action_group,
|
g_application_get_action_state (GActionGroup *action_group,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
{
|
{
|
||||||
return NULL;
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_val_if_fail (application->priv->actions != NULL, NULL);
|
||||||
|
g_return_val_if_fail (application->priv->is_registered, NULL);
|
||||||
|
|
||||||
|
return g_action_group_get_action_state (application->priv->actions,
|
||||||
|
action_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1132,6 +1217,13 @@ g_application_change_action_state (GActionGroup *action_group,
|
|||||||
const gchar *action_name,
|
const gchar *action_name,
|
||||||
GVariant *value)
|
GVariant *value)
|
||||||
{
|
{
|
||||||
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_if_fail (application->priv->actions != NULL);
|
||||||
|
g_return_if_fail (application->priv->is_registered);
|
||||||
|
|
||||||
|
g_action_group_change_action_state (application->priv->actions,
|
||||||
|
action_name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1139,6 +1231,13 @@ g_application_activate_action (GActionGroup *action_group,
|
|||||||
const gchar *action_name,
|
const gchar *action_name,
|
||||||
GVariant *parameter)
|
GVariant *parameter)
|
||||||
{
|
{
|
||||||
|
GApplication *application = G_APPLICATION (action_group);
|
||||||
|
|
||||||
|
g_return_if_fail (application->priv->actions != NULL);
|
||||||
|
g_return_if_fail (application->priv->is_registered);
|
||||||
|
|
||||||
|
g_action_group_activate_action (application->priv->actions,
|
||||||
|
action_name, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -133,6 +133,9 @@ GApplicationFlags g_application_get_flags (GApplic
|
|||||||
void g_application_set_flags (GApplication *application,
|
void g_application_set_flags (GApplication *application,
|
||||||
GApplicationFlags flags);
|
GApplicationFlags flags);
|
||||||
|
|
||||||
|
void g_application_set_action_group (GApplication *application,
|
||||||
|
GActionGroup *action_group);
|
||||||
|
|
||||||
gboolean g_application_get_is_registered (GApplication *application);
|
gboolean g_application_get_is_registered (GApplication *application);
|
||||||
gboolean g_application_get_is_remote (GApplication *application);
|
gboolean g_application_get_is_remote (GApplication *application);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user