summaryrefslogtreecommitdiff
path: root/recipes/matchbox-keyboard/files/matchbox-keyboard-applet.patch
blob: 29dc9c0ab6ed56b01db3a0b4b61d7a05fa036966 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Index: applet/applet.c
===================================================================
--- applet/applet.c	(revision 1633)
+++ applet/applet.c	(working copy)
@@ -1,30 +1,76 @@
+/*
+ * keyboard - Tray applet to toggle matchbox-keyboard's gtk-im
+ *
+ * Copyright 2007, Openedhand Ltd.
+ * Author Stefan Schmidt <stefan@openmoko.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
 #include <gtk/gtk.h>
+#include <gtk/gtkeventbox.h>
 #include <matchbox-panel/mb-panel.h>
 #include <matchbox-panel/mb-panel-scaling-image.h>
 #include <gtk-im/im-protocol.h>
 
+typedef struct {
+  GtkWidget *event_box;
+  gboolean show;
+} KeyboardApplet;
+
 static void
-on_toggled (GtkToggleButton *button)
+on_toggled (GtkWidget *event_box, GdkEventButton *event, KeyboardApplet *applet)
 {
-  protocol_send_event (gtk_toggle_button_get_active (button) ?
-                       INVOKE_KBD_SHOW : INVOKE_KBD_HIDE);
+
+  protocol_send_event (applet->show ? INVOKE_KBD_SHOW : INVOKE_KBD_HIDE);
+
+  if (applet->show)
+    applet->show = FALSE;
+  else
+    applet->show = TRUE;
 }
 
+static void
+keyboard_applet_free (KeyboardApplet *applet)
+{
+        g_slice_free (KeyboardApplet, applet);
+}
+
 G_MODULE_EXPORT GtkWidget *
 mb_panel_applet_create (const char *id, GtkOrientation orientation)
 {
-  GtkWidget *button, *image;
+  KeyboardApplet *applet;
+  MBPanelScalingImage *image;
+  //GtkImage *image;
 
-  button = gtk_toggle_button_new ();
-  gtk_widget_set_name (button, "MatchboxPanelKeyboard");
-  gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+  /* Create applet data structure */
+  applet = g_slice_new (KeyboardApplet);
 
+  applet->event_box = gtk_event_box_new ();
+  gtk_event_box_set_visible_window (applet->event_box, FALSE);
+
+  gtk_widget_set_name (applet->event_box, "MatchboxPanelKeyboard");
+
   image = mb_panel_scaling_image_new (orientation, "matchbox-keyboard");
-  gtk_container_add (GTK_CONTAINER (button), image);
 
-  g_signal_connect (button, "toggled", G_CALLBACK (on_toggled), NULL);
+  gtk_container_add (GTK_CONTAINER (applet->event_box), image);
 
-  gtk_widget_show_all (button);
+  g_object_weak_ref (G_OBJECT (applet->event_box),
+					(GWeakNotify) keyboard_applet_free, applet);
 
-  return button;
+  /* Toggle the on release event */
+  g_signal_connect (applet->event_box, "button-release-event",
+					G_CALLBACK (on_toggled), applet);
+
+  gtk_widget_show_all (applet->event_box);
+
+  return applet->event_box;
 }