Show tooltips.
This commit is contained in:
		@ -248,10 +248,10 @@
 | 
				
			|||||||
    <keysym keyval="65506">Shift_R</keysym>
 | 
					    <keysym keyval="65506">Shift_R</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="149" name="I149">
 | 
					  <key keycode="149" name="I149">
 | 
				
			||||||
    <symbol label="⌨" icon="input-keyboard-symbolic">cycle-keyboard</symbol>
 | 
					    <symbol label="⌨" icon="input-keyboard-symbolic" tooltip="Change keyboard">cycle-keyboard</symbol>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="150" name="I150">
 | 
					  <key keycode="150" name="I150">
 | 
				
			||||||
    <symbol label="☺" icon="preferences-system-symbolic">preferences</symbol>
 | 
					    <symbol label="☺" icon="preferences-system-symbolic" tooltip="Setup">preferences</symbol>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="37" name="LCTL">
 | 
					  <key keycode="37" name="LCTL">
 | 
				
			||||||
    <keysym keyval="65507">Control_L</keysym>
 | 
					    <keysym keyval="65507">Control_L</keysym>
 | 
				
			||||||
 | 
				
			|||||||
@ -232,6 +232,9 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget      *self,
 | 
				
			|||||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
    EekKey *key;
 | 
					    EekKey *key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (event->state == 0)
 | 
				
			||||||
 | 
					        return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
					    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
				
			||||||
                                             (gdouble)event->x,
 | 
					                                             (gdouble)event->x,
 | 
				
			||||||
                                             (gdouble)event->y);
 | 
					                                             (gdouble)event->y);
 | 
				
			||||||
@ -275,6 +278,30 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self)
 | 
				
			|||||||
    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
					    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static gboolean
 | 
				
			||||||
 | 
					eek_gtk_keyboard_real_query_tooltip (GtkWidget  *widget,
 | 
				
			||||||
 | 
					                                     gint        x,
 | 
				
			||||||
 | 
					                                     gint        y,
 | 
				
			||||||
 | 
					                                     gboolean    keyboard_tooltip,
 | 
				
			||||||
 | 
					                                     GtkTooltip *tooltip)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
				
			||||||
 | 
					    EekKey *key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
				
			||||||
 | 
					                                             (gdouble)x,
 | 
				
			||||||
 | 
					                                             (gdouble)y);
 | 
				
			||||||
 | 
					    if (key) {
 | 
				
			||||||
 | 
					        EekSymbol *symbol = eek_key_get_symbol (key);
 | 
				
			||||||
 | 
					        const gchar *text = eek_symbol_get_tooltip (symbol);
 | 
				
			||||||
 | 
					        if (text) {
 | 
				
			||||||
 | 
					            gtk_tooltip_set_text (tooltip, text);
 | 
				
			||||||
 | 
					            return TRUE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
					eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
				
			||||||
                               EekKeyboard    *keyboard)
 | 
					                               EekKeyboard    *keyboard)
 | 
				
			||||||
@ -397,6 +424,8 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
				
			|||||||
        eek_gtk_keyboard_real_button_release_event;
 | 
					        eek_gtk_keyboard_real_button_release_event;
 | 
				
			||||||
    widget_class->motion_notify_event =
 | 
					    widget_class->motion_notify_event =
 | 
				
			||||||
        eek_gtk_keyboard_real_motion_notify_event;
 | 
					        eek_gtk_keyboard_real_motion_notify_event;
 | 
				
			||||||
 | 
					    widget_class->query_tooltip =
 | 
				
			||||||
 | 
					        eek_gtk_keyboard_real_query_tooltip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gobject_class->set_property = eek_gtk_keyboard_set_property;
 | 
					    gobject_class->set_property = eek_gtk_keyboard_set_property;
 | 
				
			||||||
    gobject_class->dispose = eek_gtk_keyboard_dispose;
 | 
					    gobject_class->dispose = eek_gtk_keyboard_dispose;
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,7 @@ enum {
 | 
				
			|||||||
    PROP_CATEGORY,
 | 
					    PROP_CATEGORY,
 | 
				
			||||||
    PROP_MODIFIER_MASK,
 | 
					    PROP_MODIFIER_MASK,
 | 
				
			||||||
    PROP_ICON_NAME,
 | 
					    PROP_ICON_NAME,
 | 
				
			||||||
 | 
					    PROP_TOOLTIP,
 | 
				
			||||||
    PROP_LAST
 | 
					    PROP_LAST
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -49,6 +50,7 @@ struct _EekSymbolPrivate {
 | 
				
			|||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    EekModifierType modifier_mask;
 | 
					    EekModifierType modifier_mask;
 | 
				
			||||||
    gchar *icon_name;
 | 
					    gchar *icon_name;
 | 
				
			||||||
 | 
					    gchar *tooltip;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
					static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
				
			||||||
@ -71,6 +73,7 @@ eek_symbol_real_serialize (EekSerializable *self,
 | 
				
			|||||||
    g_variant_builder_add (builder, "u", priv->category);
 | 
					    g_variant_builder_add (builder, "u", priv->category);
 | 
				
			||||||
    g_variant_builder_add (builder, "u", priv->modifier_mask);
 | 
					    g_variant_builder_add (builder, "u", priv->modifier_mask);
 | 
				
			||||||
    g_variant_builder_add (builder, "s", NOTNULL(priv->icon_name));
 | 
					    g_variant_builder_add (builder, "s", NOTNULL(priv->icon_name));
 | 
				
			||||||
 | 
					    g_variant_builder_add (builder, "s", NOTNULL(priv->tooltip));
 | 
				
			||||||
#undef NOTNULL
 | 
					#undef NOTNULL
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -86,6 +89,7 @@ eek_symbol_real_deserialize (EekSerializable *self,
 | 
				
			|||||||
    g_variant_get_child (variant, index++, "u", &priv->category);
 | 
					    g_variant_get_child (variant, index++, "u", &priv->category);
 | 
				
			||||||
    g_variant_get_child (variant, index++, "u", &priv->modifier_mask);
 | 
					    g_variant_get_child (variant, index++, "u", &priv->modifier_mask);
 | 
				
			||||||
    g_variant_get_child (variant, index++, "s", &priv->icon_name);
 | 
					    g_variant_get_child (variant, index++, "s", &priv->icon_name);
 | 
				
			||||||
 | 
					    g_variant_get_child (variant, index++, "s", &priv->tooltip);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return index;
 | 
					    return index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -121,6 +125,10 @@ eek_symbol_set_property (GObject      *object,
 | 
				
			|||||||
        eek_symbol_set_icon_name (EEK_SYMBOL(object),
 | 
					        eek_symbol_set_icon_name (EEK_SYMBOL(object),
 | 
				
			||||||
                                  g_value_get_string (value));
 | 
					                                  g_value_get_string (value));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_TOOLTIP:
 | 
				
			||||||
 | 
					        eek_symbol_set_tooltip (EEK_SYMBOL(object),
 | 
				
			||||||
 | 
					                                g_value_get_string (value));
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -151,6 +159,10 @@ eek_symbol_get_property (GObject    *object,
 | 
				
			|||||||
        g_value_set_string (value,
 | 
					        g_value_set_string (value,
 | 
				
			||||||
                            eek_symbol_get_icon_name (EEK_SYMBOL(object)));
 | 
					                            eek_symbol_get_icon_name (EEK_SYMBOL(object)));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_TOOLTIP:
 | 
				
			||||||
 | 
					        g_value_set_string (value,
 | 
				
			||||||
 | 
					                            eek_symbol_get_tooltip (EEK_SYMBOL(object)));
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -165,6 +177,7 @@ eek_symbol_finalize (GObject *object)
 | 
				
			|||||||
    g_free (priv->name);
 | 
					    g_free (priv->name);
 | 
				
			||||||
    g_free (priv->label);
 | 
					    g_free (priv->label);
 | 
				
			||||||
    g_free (priv->icon_name);
 | 
					    g_free (priv->icon_name);
 | 
				
			||||||
 | 
					    g_free (priv->tooltip);
 | 
				
			||||||
    G_OBJECT_CLASS (eek_symbol_parent_class)->finalize (object);
 | 
					    G_OBJECT_CLASS (eek_symbol_parent_class)->finalize (object);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -216,6 +229,13 @@ eek_symbol_class_init (EekSymbolClass *klass)
 | 
				
			|||||||
                                 NULL,
 | 
					                                 NULL,
 | 
				
			||||||
                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
					                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_ICON_NAME, pspec);
 | 
					    g_object_class_install_property (gobject_class, PROP_ICON_NAME, pspec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pspec = g_param_spec_string ("tooltip",
 | 
				
			||||||
 | 
					                                 "Tooltip",
 | 
				
			||||||
 | 
					                                 "Tooltip text",
 | 
				
			||||||
 | 
					                                 NULL,
 | 
				
			||||||
 | 
					                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
				
			||||||
 | 
					    g_object_class_install_property (gobject_class, PROP_TOOLTIP, pspec);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -441,6 +461,45 @@ eek_symbol_get_icon_name (EekSymbol *symbol)
 | 
				
			|||||||
    return priv->icon_name;
 | 
					    return priv->icon_name;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * eek_symbol_set_tooltip:
 | 
				
			||||||
 | 
					 * @symbol: an #EekSymbol
 | 
				
			||||||
 | 
					 * @tooltip: icon name of @symbol
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Set the tooltip text of @symbol to @tooltip.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eek_symbol_set_tooltip (EekSymbol   *symbol,
 | 
				
			||||||
 | 
					                        const gchar *tooltip)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (EEK_IS_SYMBOL(symbol));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_SYMBOL_GET_PRIVATE(symbol);
 | 
				
			||||||
 | 
					    g_free (priv->tooltip);
 | 
				
			||||||
 | 
					    priv->tooltip = g_strdup (tooltip);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * eek_symbol_get_tooltip:
 | 
				
			||||||
 | 
					 * @symbol: an #EekSymbol
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Get the tooltip text of @symbol.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					G_CONST_RETURN gchar *
 | 
				
			||||||
 | 
					eek_symbol_get_tooltip (EekSymbol *symbol)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_SYMBOL_GET_PRIVATE(symbol);
 | 
				
			||||||
 | 
					    if (priv->tooltip == NULL || *priv->tooltip == '\0')
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    return priv->tooltip;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct {
 | 
					static const struct {
 | 
				
			||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    gchar *name;
 | 
					    gchar *name;
 | 
				
			||||||
 | 
				
			|||||||
@ -94,27 +94,26 @@ GType                 eek_symbol_get_type      (void) G_GNUC_CONST;
 | 
				
			|||||||
EekSymbol        *eek_symbol_new                (const gchar      *name);
 | 
					EekSymbol        *eek_symbol_new                (const gchar      *name);
 | 
				
			||||||
void              eek_symbol_set_name           (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_name           (EekSymbol        *symbol,
 | 
				
			||||||
                                                 const gchar      *name);
 | 
					                                                 const gchar      *name);
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_name      (EekSymbol        *symbol);
 | 
					const gchar      *eek_symbol_get_name           (EekSymbol        *symbol);
 | 
				
			||||||
void              eek_symbol_set_label          (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_label          (EekSymbol        *symbol,
 | 
				
			||||||
                                                 const gchar      *label);
 | 
					                                                 const gchar      *label);
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_label     (EekSymbol        *symbol);
 | 
					const gchar      *eek_symbol_get_label          (EekSymbol        *symbol);
 | 
				
			||||||
void              eek_symbol_set_category       (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_category       (EekSymbol        *symbol,
 | 
				
			||||||
                                                 EekSymbolCategory category);
 | 
					                                                 EekSymbolCategory category);
 | 
				
			||||||
EekSymbolCategory eek_symbol_get_category       (EekSymbol        *symbol);
 | 
					EekSymbolCategory eek_symbol_get_category       (EekSymbol        *symbol);
 | 
				
			||||||
EekModifierType       eek_symbol_get_modifier_mask
 | 
					EekModifierType   eek_symbol_get_modifier_mask  (EekSymbol        *symbol);
 | 
				
			||||||
                                               (EekSymbol        *symbol);
 | 
					void              eek_symbol_set_modifier_mask  (EekSymbol        *symbol,
 | 
				
			||||||
void                  eek_symbol_set_modifier_mask
 | 
					 | 
				
			||||||
                                               (EekSymbol        *symbol,
 | 
					 | 
				
			||||||
                                                 EekModifierType   mask);
 | 
					                                                 EekModifierType   mask);
 | 
				
			||||||
gboolean          eek_symbol_is_modifier        (EekSymbol        *symbol);
 | 
					gboolean          eek_symbol_is_modifier        (EekSymbol        *symbol);
 | 
				
			||||||
void              eek_symbol_set_icon_name      (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_icon_name      (EekSymbol        *symbol,
 | 
				
			||||||
                                                 const gchar      *icon_name);
 | 
					                                                 const gchar      *icon_name);
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_icon_name (EekSymbol        *symbol);
 | 
					const gchar      *eek_symbol_get_icon_name      (EekSymbol        *symbol);
 | 
				
			||||||
 | 
					void              eek_symbol_set_tooltip        (EekSymbol        *symbol,
 | 
				
			||||||
 | 
					                                                 const gchar      *tooltip);
 | 
				
			||||||
 | 
					const gchar *     eek_symbol_get_tooltip        (EekSymbol        *symbol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_category_get_name
 | 
					const gchar      *eek_symbol_category_get_name  (EekSymbolCategory category);
 | 
				
			||||||
                                               (EekSymbolCategory category);
 | 
					EekSymbolCategory eek_symbol_category_from_name (const gchar      *name);
 | 
				
			||||||
EekSymbolCategory     eek_symbol_category_from_name
 | 
					 | 
				
			||||||
                                               (const gchar      *name);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -571,6 +571,7 @@ struct _SymbolsParseData {
 | 
				
			|||||||
    GSList *symbols;
 | 
					    GSList *symbols;
 | 
				
			||||||
    gchar *label;
 | 
					    gchar *label;
 | 
				
			||||||
    gchar *icon;
 | 
					    gchar *icon;
 | 
				
			||||||
 | 
					    gchar *tooltip;
 | 
				
			||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    guint keyval;
 | 
					    guint keyval;
 | 
				
			||||||
    gint groups;
 | 
					    gint groups;
 | 
				
			||||||
@ -683,6 +684,11 @@ symbols_start_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        if (attribute != NULL)
 | 
					        if (attribute != NULL)
 | 
				
			||||||
            data->icon = g_strdup (attribute);
 | 
					            data->icon = g_strdup (attribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
 | 
					                                   "tooltip");
 | 
				
			||||||
 | 
					        if (attribute != NULL)
 | 
				
			||||||
 | 
					            data->tooltip = g_strdup (attribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
                                   "category");
 | 
					                                   "category");
 | 
				
			||||||
        if (attribute != NULL)
 | 
					        if (attribute != NULL)
 | 
				
			||||||
@ -766,6 +772,11 @@ symbols_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
            g_free (data->icon);
 | 
					            g_free (data->icon);
 | 
				
			||||||
            data->icon = NULL;
 | 
					            data->icon = NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (data->tooltip) {
 | 
				
			||||||
 | 
					            eek_symbol_set_tooltip (symbol, data->tooltip);
 | 
				
			||||||
 | 
					            g_free (data->tooltip);
 | 
				
			||||||
 | 
					            data->tooltip = NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        data->symbols = g_slist_prepend (data->symbols, symbol);
 | 
					        data->symbols = g_slist_prepend (data->symbols, symbol);
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
 | 
				
			|||||||
@ -301,6 +301,8 @@ update_widget (ServerContextService *context)
 | 
				
			|||||||
    eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme);
 | 
					    eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme);
 | 
				
			||||||
    g_object_unref (theme);
 | 
					    g_object_unref (theme);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gtk_widget_set_has_tooltip (context->widget, TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!context->window) {
 | 
					    if (!context->window) {
 | 
				
			||||||
        context->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
					        context->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
				
			||||||
        g_signal_connect (context->window, "destroy",
 | 
					        g_signal_connect (context->window, "destroy",
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user