shortcuttrigger: Add gtk_shortcut_trigger_to_label()
Provide a user-presentable string.
This commit is contained in:
committed by
Matthias Clasen
parent
e050288d07
commit
22801f0d4d
@@ -6053,6 +6053,10 @@ gtk_shortcut_trigger_unref
|
|||||||
GtkShortcutTriggerType
|
GtkShortcutTriggerType
|
||||||
gtk_shortcut_trigger_get_trigger_type
|
gtk_shortcut_trigger_get_trigger_type
|
||||||
gtk_shortcut_trigger_trigger
|
gtk_shortcut_trigger_trigger
|
||||||
|
gtk_shortcut_trigger_to_string
|
||||||
|
gtk_shortcut_trigger_print
|
||||||
|
gtk_shortcut_trigger_to_label
|
||||||
|
gtk_shortcut_trigger_print_label
|
||||||
|
|
||||||
<SUBSECTION>
|
<SUBSECTION>
|
||||||
gtk_keyval_trigger_new
|
gtk_keyval_trigger_new
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
#include "gtkshortcuttrigger.h"
|
#include "gtkshortcuttrigger.h"
|
||||||
|
|
||||||
#include "gtkaccelgroup.h"
|
#include "gtkaccelgroupprivate.h"
|
||||||
|
|
||||||
typedef struct _GtkShortcutTriggerClass GtkShortcutTriggerClass;
|
typedef struct _GtkShortcutTriggerClass GtkShortcutTriggerClass;
|
||||||
|
|
||||||
@@ -63,6 +63,9 @@ struct _GtkShortcutTriggerClass
|
|||||||
GdkEvent *event);
|
GdkEvent *event);
|
||||||
void (* print) (GtkShortcutTrigger *trigger,
|
void (* print) (GtkShortcutTrigger *trigger,
|
||||||
GString *string);
|
GString *string);
|
||||||
|
gboolean (* print_label) (GtkShortcutTrigger *trigger,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string);
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE (GtkShortcutTrigger, gtk_shortcut_trigger,
|
G_DEFINE_BOXED_TYPE (GtkShortcutTrigger, gtk_shortcut_trigger,
|
||||||
@@ -214,6 +217,71 @@ gtk_shortcut_trigger_print (GtkShortcutTrigger *self,
|
|||||||
return self->trigger_class->print (self, string);
|
return self->trigger_class->print (self, string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_shortcut_trigger_to_label:
|
||||||
|
* @self: a #GtkShortcutTrigger
|
||||||
|
* @display: #GdkDisplay to print for
|
||||||
|
*
|
||||||
|
* Gets textual representation for the given trigger. This
|
||||||
|
* function is returning a translated string for presentation
|
||||||
|
* to end users for example in menu items or in help texts.
|
||||||
|
*
|
||||||
|
* The @display in use may influence the resulting string in
|
||||||
|
* various forms, such as resolving hardware keycodes or by
|
||||||
|
* causing display-specific modifier names.
|
||||||
|
*
|
||||||
|
* The form of the representation may change at any time and is
|
||||||
|
* not guaranteed to stay identical.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a new string
|
||||||
|
**/
|
||||||
|
char *
|
||||||
|
gtk_shortcut_trigger_to_label (GtkShortcutTrigger *self,
|
||||||
|
GdkDisplay *display)
|
||||||
|
{
|
||||||
|
GString *string;
|
||||||
|
|
||||||
|
g_return_val_if_fail (self != NULL, NULL);
|
||||||
|
|
||||||
|
string = g_string_new (NULL);
|
||||||
|
gtk_shortcut_trigger_print_label (self, display, string);
|
||||||
|
|
||||||
|
return g_string_free (string, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_shortcut_trigger_print_label:
|
||||||
|
* @self: a #GtkShortcutTrigger
|
||||||
|
* @display: #GdkDisplay to print for
|
||||||
|
* @string: a #GString to print into
|
||||||
|
*
|
||||||
|
* Prints the given trigger into a string. This function is
|
||||||
|
* returning a translated string for presentation to end users
|
||||||
|
* for example in menu items or in help texts.
|
||||||
|
*
|
||||||
|
* The @display in use may influence the resulting string in
|
||||||
|
* various forms, such as resolving hardware keycodes or by
|
||||||
|
* causing display-specific modifier names.
|
||||||
|
*
|
||||||
|
* The form of the representation may change at any time and is
|
||||||
|
* not guaranteed to stay identical.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if something was printed or %FALSE if the
|
||||||
|
* trigger did not have a textual representation suitable
|
||||||
|
* for end users.
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gtk_shortcut_trigger_print_label (GtkShortcutTrigger *self,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_SHORTCUT_TRIGGER (self), FALSE);
|
||||||
|
g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
|
||||||
|
g_return_val_if_fail (string != NULL, FALSE);
|
||||||
|
|
||||||
|
return self->trigger_class->print_label (self, display, string);
|
||||||
|
}
|
||||||
|
|
||||||
/*** GTK_SHORTCUT_TRIGGER_NEVER ***/
|
/*** GTK_SHORTCUT_TRIGGER_NEVER ***/
|
||||||
|
|
||||||
typedef struct _GtkNeverTrigger GtkNeverTrigger;
|
typedef struct _GtkNeverTrigger GtkNeverTrigger;
|
||||||
@@ -247,13 +315,22 @@ gtk_never_trigger_print (GtkShortcutTrigger *trigger,
|
|||||||
g_string_append (string, "<never>");
|
g_string_append (string, "<never>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_never_trigger_print_label (GtkShortcutTrigger *trigger,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static const GtkShortcutTriggerClass GTK_NEVER_TRIGGER_CLASS = {
|
static const GtkShortcutTriggerClass GTK_NEVER_TRIGGER_CLASS = {
|
||||||
GTK_SHORTCUT_TRIGGER_NEVER,
|
GTK_SHORTCUT_TRIGGER_NEVER,
|
||||||
sizeof (GtkNeverTrigger),
|
sizeof (GtkNeverTrigger),
|
||||||
"GtkNeverTrigger",
|
"GtkNeverTrigger",
|
||||||
gtk_never_trigger_finalize,
|
gtk_never_trigger_finalize,
|
||||||
gtk_never_trigger_trigger,
|
gtk_never_trigger_trigger,
|
||||||
gtk_never_trigger_print
|
gtk_never_trigger_print,
|
||||||
|
gtk_never_trigger_print_label
|
||||||
};
|
};
|
||||||
|
|
||||||
static GtkNeverTrigger never = { { >K_NEVER_TRIGGER_CLASS, 1 } };
|
static GtkNeverTrigger never = { { >K_NEVER_TRIGGER_CLASS, 1 } };
|
||||||
@@ -326,13 +403,26 @@ gtk_keyval_trigger_print (GtkShortcutTrigger *trigger,
|
|||||||
g_free (accelerator_name);
|
g_free (accelerator_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_keyval_trigger_print_label (GtkShortcutTrigger *trigger,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string)
|
||||||
|
{
|
||||||
|
GtkKeyvalTrigger *self = (GtkKeyvalTrigger *) trigger;
|
||||||
|
|
||||||
|
gtk_accelerator_print_label (string, self->keyval, self->modifiers);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static const GtkShortcutTriggerClass GTK_KEYVAL_TRIGGER_CLASS = {
|
static const GtkShortcutTriggerClass GTK_KEYVAL_TRIGGER_CLASS = {
|
||||||
GTK_SHORTCUT_TRIGGER_KEYVAL,
|
GTK_SHORTCUT_TRIGGER_KEYVAL,
|
||||||
sizeof (GtkKeyvalTrigger),
|
sizeof (GtkKeyvalTrigger),
|
||||||
"GtkKeyvalTrigger",
|
"GtkKeyvalTrigger",
|
||||||
gtk_keyval_trigger_finalize,
|
gtk_keyval_trigger_finalize,
|
||||||
gtk_keyval_trigger_trigger,
|
gtk_keyval_trigger_trigger,
|
||||||
gtk_keyval_trigger_print
|
gtk_keyval_trigger_print,
|
||||||
|
gtk_keyval_trigger_print_label
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -440,7 +530,6 @@ gtk_alternative_trigger_trigger (GtkShortcutTrigger *trigger,
|
|||||||
static void
|
static void
|
||||||
gtk_alternative_trigger_print (GtkShortcutTrigger *trigger,
|
gtk_alternative_trigger_print (GtkShortcutTrigger *trigger,
|
||||||
GString *string)
|
GString *string)
|
||||||
|
|
||||||
{
|
{
|
||||||
GtkAlternativeTrigger *self = (GtkAlternativeTrigger *) trigger;
|
GtkAlternativeTrigger *self = (GtkAlternativeTrigger *) trigger;
|
||||||
|
|
||||||
@@ -449,13 +538,34 @@ gtk_alternative_trigger_print (GtkShortcutTrigger *trigger,
|
|||||||
gtk_shortcut_trigger_print (self->second, string);
|
gtk_shortcut_trigger_print (self->second, string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_alternative_trigger_print_label (GtkShortcutTrigger *trigger,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string)
|
||||||
|
{
|
||||||
|
GtkAlternativeTrigger *self = (GtkAlternativeTrigger *) trigger;
|
||||||
|
|
||||||
|
if (gtk_shortcut_trigger_print_label (self->first, display, string))
|
||||||
|
{
|
||||||
|
g_string_append (string, ", ");
|
||||||
|
if (!gtk_shortcut_trigger_print_label (self->second, display, string))
|
||||||
|
g_string_truncate (string, string->len - 2);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return gtk_shortcut_trigger_print_label (self->second, display, string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const GtkShortcutTriggerClass GTK_ALTERNATIVE_TRIGGER_CLASS = {
|
static const GtkShortcutTriggerClass GTK_ALTERNATIVE_TRIGGER_CLASS = {
|
||||||
GTK_SHORTCUT_TRIGGER_ALTERNATIVE,
|
GTK_SHORTCUT_TRIGGER_ALTERNATIVE,
|
||||||
sizeof (GtkAlternativeTrigger),
|
sizeof (GtkAlternativeTrigger),
|
||||||
"GtkAlternativeTrigger",
|
"GtkAlternativeTrigger",
|
||||||
gtk_alternative_trigger_finalize,
|
gtk_alternative_trigger_finalize,
|
||||||
gtk_alternative_trigger_trigger,
|
gtk_alternative_trigger_trigger,
|
||||||
gtk_alternative_trigger_print
|
gtk_alternative_trigger_print,
|
||||||
|
gtk_alternative_trigger_print_label
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -64,6 +64,13 @@ char * gtk_shortcut_trigger_to_string (GtkShortcutTrig
|
|||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gtk_shortcut_trigger_print (GtkShortcutTrigger *self,
|
void gtk_shortcut_trigger_print (GtkShortcutTrigger *self,
|
||||||
GString *string);
|
GString *string);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
char * gtk_shortcut_trigger_to_label (GtkShortcutTrigger *self,
|
||||||
|
GdkDisplay *display);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
gboolean gtk_shortcut_trigger_print_label (GtkShortcutTrigger *self,
|
||||||
|
GdkDisplay *display,
|
||||||
|
GString *string);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
gboolean gtk_shortcut_trigger_trigger (GtkShortcutTrigger *self,
|
gboolean gtk_shortcut_trigger_trigger (GtkShortcutTrigger *self,
|
||||||
|
|||||||
Reference in New Issue
Block a user