mirror of
https://gitlab.gnome.org/GNOME/libmks.git
synced 2024-07-02 16:02:38 +00:00
lib: add MksDisplay:ungrab-trigger
This allows setting a customizable trigger which may be used to ungrab the display. Currently, the default is ctrl+alt+g and the only thing that will be released is the shortcut inhibition.
This commit is contained in:
parent
1a4bcb8c31
commit
459cb173b0
|
@ -31,16 +31,20 @@
|
||||||
#include "mks-paintable-private.h"
|
#include "mks-paintable-private.h"
|
||||||
#include "mks-screen.h"
|
#include "mks-screen.h"
|
||||||
|
|
||||||
|
#define DEFAULT_UNGRAB_TRIGGER "<Control><Alt>g"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
MksScreen *screen;
|
MksScreen *screen;
|
||||||
MksDisplayPicture *picture;
|
MksDisplayPicture *picture;
|
||||||
MksInhibitor *inhibitor;
|
MksInhibitor *inhibitor;
|
||||||
|
GtkShortcutTrigger *ungrab_trigger;
|
||||||
} MksDisplayPrivate;
|
} MksDisplayPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_SCREEN,
|
PROP_SCREEN,
|
||||||
|
PROP_UNGRAB_TRIGGER,
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,11 +172,29 @@ mks_display_legacy_event_cb (MksDisplay *self,
|
||||||
if (priv->screen == NULL)
|
if (priv->screen == NULL)
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
if (event_type == GDK_BUTTON_PRESS)
|
if (FALSE) {}
|
||||||
|
else if (event_type == GDK_BUTTON_PRESS)
|
||||||
{
|
{
|
||||||
if (priv->inhibitor == NULL)
|
if (priv->inhibitor == NULL)
|
||||||
priv->inhibitor = mks_inhibitor_new (GTK_WIDGET (priv->picture), event);
|
priv->inhibitor = mks_inhibitor_new (GTK_WIDGET (priv->picture), event);
|
||||||
}
|
}
|
||||||
|
else if (event_type == GDK_KEY_PRESS)
|
||||||
|
{
|
||||||
|
GdkKeyMatch match;
|
||||||
|
|
||||||
|
match = gtk_shortcut_trigger_trigger (priv->ungrab_trigger, event, FALSE);
|
||||||
|
|
||||||
|
if (match == GDK_KEY_MATCH_EXACT)
|
||||||
|
{
|
||||||
|
if (priv->inhibitor != NULL)
|
||||||
|
{
|
||||||
|
mks_inhibitor_uninhibit (priv->inhibitor);
|
||||||
|
g_clear_object (&priv->inhibitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
return GDK_EVENT_STOP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
@ -267,6 +289,10 @@ mks_display_get_property (GObject *object,
|
||||||
g_value_set_object (value, mks_display_get_screen (self));
|
g_value_set_object (value, mks_display_get_screen (self));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_UNGRAB_TRIGGER:
|
||||||
|
g_value_set_object (value, mks_display_get_ungrab_trigger (self));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -286,6 +312,10 @@ mks_display_set_property (GObject *object,
|
||||||
mks_display_set_screen (self, g_value_get_object (value));
|
mks_display_set_screen (self, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_UNGRAB_TRIGGER:
|
||||||
|
mks_display_set_ungrab_trigger (self, g_value_get_object (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -311,6 +341,11 @@ mks_display_class_init (MksDisplayClass *klass)
|
||||||
MKS_TYPE_SCREEN,
|
MKS_TYPE_SCREEN,
|
||||||
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
properties [PROP_UNGRAB_TRIGGER] =
|
||||||
|
g_param_spec_object ("ungrab-trigger", NULL, NULL,
|
||||||
|
GTK_TYPE_SHORTCUT_TRIGGER,
|
||||||
|
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||||
|
|
||||||
gtk_widget_class_set_css_name (widget_class, "MksDisplay");
|
gtk_widget_class_set_css_name (widget_class, "MksDisplay");
|
||||||
|
@ -335,6 +370,8 @@ mks_display_init (MksDisplay *self)
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
||||||
|
|
||||||
|
priv->ungrab_trigger = gtk_shortcut_trigger_parse_string (DEFAULT_UNGRAB_TRIGGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
|
@ -380,3 +417,38 @@ mks_display_set_screen (MksDisplay *self,
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SCREEN]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SCREEN]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mks_display_get_ungrab_trigger:
|
||||||
|
* @self: a #MksDisplay
|
||||||
|
*
|
||||||
|
* Gets the #GtkShortcutTrigger that will ungrab the display.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): a #GtkShortcutTrigger
|
||||||
|
*/
|
||||||
|
GtkShortcutTrigger *
|
||||||
|
mks_display_get_ungrab_trigger (MksDisplay *self)
|
||||||
|
{
|
||||||
|
MksDisplayPrivate *priv = mks_display_get_instance_private (self);
|
||||||
|
|
||||||
|
g_return_val_if_fail (MKS_IS_DISPLAY (self), NULL);
|
||||||
|
|
||||||
|
return priv->ungrab_trigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mks_display_set_ungrab_trigger (MksDisplay *self,
|
||||||
|
GtkShortcutTrigger *ungrab_trigger)
|
||||||
|
{
|
||||||
|
MksDisplayPrivate *priv = mks_display_get_instance_private (self);
|
||||||
|
|
||||||
|
g_return_if_fail (MKS_IS_DISPLAY (self));
|
||||||
|
g_return_if_fail (!ungrab_trigger || GTK_IS_SHORTCUT_TRIGGER (ungrab_trigger));
|
||||||
|
|
||||||
|
if (g_set_object (&priv->ungrab_trigger, ungrab_trigger))
|
||||||
|
{
|
||||||
|
if (priv->ungrab_trigger == NULL)
|
||||||
|
priv->ungrab_trigger = gtk_shortcut_trigger_parse_string (DEFAULT_UNGRAB_TRIGGER);
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_UNGRAB_TRIGGER]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,11 +41,16 @@ struct _MksDisplayClass
|
||||||
};
|
};
|
||||||
|
|
||||||
MKS_AVAILABLE_IN_ALL
|
MKS_AVAILABLE_IN_ALL
|
||||||
GtkWidget *mks_display_new (void);
|
GtkWidget *mks_display_new (void);
|
||||||
MKS_AVAILABLE_IN_ALL
|
MKS_AVAILABLE_IN_ALL
|
||||||
MksScreen *mks_display_get_screen (MksDisplay *self);
|
GtkShortcutTrigger *mks_display_get_ungrab_trigger (MksDisplay *self);
|
||||||
MKS_AVAILABLE_IN_ALL
|
MKS_AVAILABLE_IN_ALL
|
||||||
void mks_display_set_screen (MksDisplay *self,
|
void mks_display_set_ungrab_trigger (MksDisplay *self,
|
||||||
MksScreen *screen);
|
GtkShortcutTrigger *trigger);
|
||||||
|
MKS_AVAILABLE_IN_ALL
|
||||||
|
MksScreen *mks_display_get_screen (MksDisplay *self);
|
||||||
|
MKS_AVAILABLE_IN_ALL
|
||||||
|
void mks_display_set_screen (MksDisplay *self,
|
||||||
|
MksScreen *screen);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
Loading…
Reference in New Issue
Block a user