[maemo-commits] [maemo-commits] r19284 - in projects/haf/trunk/hildon-input-method-plugins-example: . src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Sep 1 18:00:46 EEST 2009
Author: femorandeira
Date: 2009-09-01 18:00:42 +0300 (Tue, 01 Sep 2009)
New Revision: 19284

Modified:
   projects/haf/trunk/hildon-input-method-plugins-example/configure.ac
   projects/haf/trunk/hildon-input-method-plugins-example/src/Makefile.am
   projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c
Log:
I refined the FKB, trying to make it appear faster by having it as a "cached" plugin. I am also committing the changes that I have made to the configure.ac and src/Makefile.am files.

Modified: projects/haf/trunk/hildon-input-method-plugins-example/configure.ac
===================================================================
--- projects/haf/trunk/hildon-input-method-plugins-example/configure.ac	2009-09-01 09:44:43 UTC (rev 19283)
+++ projects/haf/trunk/hildon-input-method-plugins-example/configure.ac	2009-09-01 15:00:42 UTC (rev 19284)
@@ -14,7 +14,8 @@
 PKG_CHECK_MODULES(HIM_PLUGINS_EXAMPLE, 
   hildon-input-method-framework-3.0 >= 1.99.0 hildon-input-method-ui-3.0 >= 1.99.0 
   gtk+-2.0 >= 2.4.0 gconf-2.0 > 2.0
-  dbus-1 >= 0.60)
+  dbus-1 >= 0.60
+  hildon-1 >= 1.0.0)
 AC_SUBST(HIM_PLUGINS_EXAMPLE_CFLAGS)
 AC_SUBST(HIM_PLUGINS_EXAMPLE_LIBS)
 

Modified: projects/haf/trunk/hildon-input-method-plugins-example/src/Makefile.am
===================================================================
--- projects/haf/trunk/hildon-input-method-plugins-example/src/Makefile.am	2009-09-01 09:44:43 UTC (rev 19283)
+++ projects/haf/trunk/hildon-input-method-plugins-example/src/Makefile.am	2009-09-01 15:00:42 UTC (rev 19284)
@@ -1,16 +1,30 @@
 AM_CPPFLAGS  = $(HIM_PLUGINS_EXAMPLE_CFLAGS) $(HIM_PLUGINS_EXAMPLE_WARNING_FLAGS)
 
+INCLUDES = \
+	$(HILDON_CFLAGS) \
+	$(HILDON_IM_CFLAGS)\
+	$(HILDON_IMF_CFLAGS)\
+	$(GCONF_CFLAGS)\
+	$(LIBOSSO_CFLAGS) \
+	$(HILDON_LGPL_CFLAGS) \
+	$(XI_CFLAGS)
+
 # Install the plugin (shared library) in, for instance,
 # /usr/lib/hildon-input-method/, where it will be found by the 
 # hildon-input-method framework:
 implugindir = $(libdir)/hildon-input-method
-implugin_LTLIBRARIES = him_vkb_example.la
+implugin_LTLIBRARIES = him_vkb_example.la hildon_im_example_fkb.la
 
 # Build the plugin (shared library):
 him_vkb_example_la_SOURCES = him-vkb-example.c
 him_vkb_example_la_LIBADD = $(HIM_PLUGINS_EXAMPLE_LIBS)
 him_vkb_example_la_LDFLAGS = -avoid-version -module 
 
+# Build the plugin (shared library):
+hildon_im_example_fkb_la_SOURCES = hildon-im-example-fkb.c
+hildon_im_example_fkb_la_LIBADD = $(HIM_PLUGINS_EXAMPLE_LIBS)
+hildon_im_example_fkb_la_LDFLAGS = -avoid-version -module 
+
 # After installation, update the cache so that hildon-input-method knows about 
 # the new plugin:
 install-data-hook:

Modified: projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c
===================================================================
--- projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c	2009-09-01 09:44:43 UTC (rev 19283)
+++ projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c	2009-09-01 15:00:42 UTC (rev 19284)
@@ -80,12 +80,12 @@
   gint saved_offset;
   
   GtkWidget *vbox;
-  GtkWidget *keyboard_vbox;
+  GtkWidget *keyboard_nbook;
   
-  GtkWidget *alpha_lower;
-  GtkWidget *alpha_upper;
-  GtkWidget *special_lower;
-  GtkWidget *special_upper;
+  gint alpha_lower;
+  gint alpha_upper;
+  gint special_lower;
+  gint special_upper;
   
   GtkWidget *shift_button;
   GtkWidget *symbols_button;
@@ -170,7 +170,7 @@
 /*
  * Internal functions
  */
-static void create_window (HildonIMExampleFKB *self);
+static void populate_window (HildonIMExampleFKB *self);
 
 
 /*
@@ -235,7 +235,7 @@
     NULL,                               /* menu title */
     NULL,                               /* gettext domain */
     TRUE,                               /* visible in menu */
-    FALSE,                              /* cached */
+    TRUE,                              /* cached */
     HILDON_IM_TYPE_FULLSCREEN,          /* UI type */
     HILDON_IM_GROUP_LATIN,              /* group */
     HILDON_IM_DEFAULT_PLUGIN_PRIORITY,  /* priority */
@@ -342,10 +342,6 @@
   priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
   
   priv->window = NULL;
-  priv->alpha_lower = NULL;
-  priv->alpha_upper = NULL;
-  priv->special_lower = NULL;
-  priv->special_upper = NULL;
 }
 
 static void 
@@ -414,18 +410,28 @@
 {
   HildonIMExampleFKB *self;
   HildonIMExampleFKBPrivate *priv;
+  gboolean window_is_new;
 
   g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (plugin));
   self = HILDON_IM_EXAMPLE_FKB(plugin);
   priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
   
-  if (priv->window == NULL)
+  window_is_new = (priv->window == NULL);
+  
+  if (window_is_new)
   {
-    create_window(self);
+    priv->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   }
+
+  gtk_window_set_type_hint(GTK_WINDOW(priv->window), GDK_WINDOW_TYPE_HINT_DIALOG);
+  gtk_window_set_decorated(GTK_WINDOW(priv->window), FALSE);
+  /*
+      we don't really support this...
+    hildon_gtk_window_set_portrait_flags (GTK_WINDOW(priv->window), 
+                                          HILDON_PORTRAIT_MODE_SUPPORT);
+   */
   
   priv->saved_offset = 0;
-  
   hildon_im_ui_send_communication_message(priv->ui,
                                           HILDON_IM_CONTEXT_REQUEST_SURROUNDING_FULL);
   
@@ -434,6 +440,12 @@
 
   gdk_window_set_transient_for(GTK_WIDGET(priv->window)->window,
                                gtk_widget_get_root_window(GTK_WIDGET(priv->window)));
+  
+  if (window_is_new)
+  {
+    populate_window(self);
+    gtk_widget_show_all(priv->window);
+  }
 }
 
 static void
@@ -446,8 +458,11 @@
   self = HILDON_IM_EXAMPLE_FKB(plugin);
   priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
 
-  gtk_widget_hide(GTK_WIDGET(priv->window));
-  hildon_im_ui_restore_previous_mode(priv->ui);
+  if (GTK_WIDGET_VISIBLE(GTK_WIDGET(priv->window)))
+  {
+    gtk_widget_hide(GTK_WIDGET(priv->window));
+    hildon_im_ui_restore_previous_mode(priv->ui);
+  }
 }
 
 static void
@@ -546,7 +561,7 @@
 get_keyboard_layout (HildonIMExampleFKB *self,
                      const gchar** keyboard_layout[])
 {
-  GtkWidget *vbox = gtk_vbox_new(TRUE, 0);
+  GtkWidget *vbox = gtk_vbox_new(TRUE, 5);
   gint i, j;
 
   for (i = 0; keyboard_layout[i] != NULL; i++)
@@ -578,24 +593,6 @@
 }
 
 static void
-apply_keyboard_layout (HildonIMExampleFKB *self,
-                       GtkWidget *layout)
-{
-  HildonIMExampleFKBPrivate *priv;
-
-  priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
-  
-  gtk_container_forall(GTK_CONTAINER(priv->keyboard_vbox),
-                       remove_children_from_container,
-                       GTK_CONTAINER(priv->keyboard_vbox));
-
-  gtk_box_pack_start(GTK_BOX(priv->keyboard_vbox), layout, FALSE, FALSE, 0);
-  
-  gtk_widget_show_all (priv->keyboard_vbox);
-  gtk_container_resize_children (GTK_CONTAINER(priv->window));
-}
-
-static void
 delete_button_clicked (GtkButton *button, gpointer user_data)
 {
   HildonIMExampleFKB *self;
@@ -670,52 +667,46 @@
   {
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->shift_button)))
     {
-      apply_keyboard_layout(self, priv->special_upper);
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                                    priv->special_upper);
     }
     else
     {
-      apply_keyboard_layout(self, priv->special_lower);
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                                    priv->special_lower);
     }
   }
   else
   {
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->shift_button)))
     {
-      apply_keyboard_layout(self, priv->alpha_upper);
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                                    priv->alpha_upper);
     }
     else
     {
-      apply_keyboard_layout(self, priv->alpha_lower);
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                                    priv->alpha_lower);
     }
   }
 }
 
 static void
-create_window (HildonIMExampleFKB *self)
+populate_window (HildonIMExampleFKB *self)
 {
   HildonIMExampleFKBPrivate *priv;
+  GtkWidget *parea, *hbox;
+  gint screen_width = gdk_screen_width();
 
   priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
   
-  priv->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  
-  gtk_window_set_type_hint(GTK_WINDOW(priv->window), GDK_WINDOW_TYPE_HINT_DIALOG);
-  gtk_window_set_decorated(GTK_WINDOW(priv->window), FALSE);
-  gtk_window_fullscreen(GTK_WINDOW(priv->window));
-  /*
-  It is always rotated! :-(
-  */
-  hildon_gtk_window_set_portrait_flags (GTK_WINDOW(priv->window), 
-                                        HILDON_PORTRAIT_MODE_SUPPORT);
-  
-  GtkWidget *parea, *hbox;
-  
   priv->vbox = gtk_vbox_new(FALSE, 5);
   
   priv->text_view = hildon_text_view_new();
   gtk_widget_set_name(priv->text_view, "him-textview");
   gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(priv->text_view), GTK_WRAP_WORD_CHAR);
   gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(priv->text_view), TRUE);
+  gtk_widget_set_name(priv->text_view, "him-textview");
   
   g_signal_connect_after(G_OBJECT(priv->text_view), "button-press-event",
                          G_CALLBACK(textview_button_release_cb), self);
@@ -726,19 +717,48 @@
   
   gtk_box_pack_start(GTK_BOX(priv->vbox), parea, TRUE, TRUE, 0);
   
-  priv->keyboard_vbox = gtk_vbox_new(TRUE, 5);
-  gtk_box_pack_start(GTK_BOX(priv->vbox), priv->keyboard_vbox, FALSE, FALSE, 0);
+  /* now we create the different layouts and place them in a notebook */
+  
+  priv->keyboard_nbook = gtk_notebook_new();
+  g_object_set (G_OBJECT(priv->keyboard_nbook), "show-tabs", FALSE, NULL);
+  
+  priv->alpha_lower =
+    gtk_notebook_append_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                             get_keyboard_layout(self, alpha_lower), NULL);
+  priv->alpha_upper =
+    gtk_notebook_append_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                             get_keyboard_layout(self, alpha_upper), NULL);
+  priv->special_lower =
+    gtk_notebook_append_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                             get_keyboard_layout(self, special_lower), NULL);
+  priv->special_upper = 
+    gtk_notebook_append_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                             get_keyboard_layout(self, special_upper), NULL);
 
-  gint screen_width = gdk_screen_width();
+  gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->keyboard_nbook),
+                                priv->alpha_lower);
+  
+  gtk_box_pack_start(GTK_BOX(priv->vbox), priv->keyboard_nbook, FALSE, FALSE, 0);
 
   hbox = gtk_hbox_new(FALSE, 0);
+
+  /* Close button */
   
-  /* Shif button */
+  priv->close_button = hildon_button_new(HILDON_SIZE_FINGER_HEIGHT,
+                                         HILDON_BUTTON_ARRANGEMENT_VERTICAL);
+  hildon_button_set_image(HILDON_BUTTON(priv->close_button),
+                          gtk_image_new_from_icon_name("keyboard_close", -1));
+  hildon_button_set_image_alignment(HILDON_BUTTON(priv->close_button), 0.0, 0.0);
+  gtk_widget_set_size_request(priv->close_button, screen_width*0.1, 70);
+  gtk_box_pack_start(GTK_BOX(hbox), priv->close_button, FALSE, FALSE, 0);
+  g_signal_connect(priv->close_button, "clicked", G_CALLBACK(close_fkb), self);
   
+  /* Shift button */
+  
   priv->shift_button = hildon_gtk_toggle_button_new(HILDON_SIZE_FINGER_HEIGHT);
   gtk_button_set_label(GTK_BUTTON(priv->shift_button), "↑");
   gtk_widget_set_size_request(priv->shift_button, screen_width*0.15, 70);
-  gtk_box_pack_start(GTK_BOX(hbox), priv->shift_button, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), priv->shift_button, FALSE, FALSE, 0);
   g_signal_connect(priv->shift_button, "toggled",
                    G_CALLBACK(shift_symbols_buttons_toggled), self);
 
@@ -747,7 +767,7 @@
   priv->symbols_button = hildon_gtk_toggle_button_new (HILDON_SIZE_FINGER_HEIGHT);
   gtk_button_set_label(GTK_BUTTON(priv->symbols_button), "1*?");
   gtk_widget_set_size_request(priv->symbols_button, screen_width*0.15, 70);
-  gtk_box_pack_start(GTK_BOX(hbox), priv->symbols_button, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), priv->symbols_button, FALSE, FALSE, 0);
   g_signal_connect(priv->symbols_button, "toggled",
                    G_CALLBACK(shift_symbols_buttons_toggled), self);
 
@@ -756,7 +776,6 @@
   priv->space_button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT,
                                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL,
                                                     " ", NULL);
-  gtk_widget_set_size_request(priv->space_button, screen_width*0.3, 70);
   gtk_box_pack_start(GTK_BOX(hbox), priv->space_button, TRUE, TRUE, 0);
   g_signal_connect(priv->space_button, "pressed", G_CALLBACK(text_button_clicked), self);
 
@@ -768,7 +787,7 @@
                           gtk_image_new_from_icon_name("keyboard_enter",
                                                        -1));
   gtk_widget_set_size_request(priv->return_button, screen_width*0.15, 70);
-  gtk_box_pack_start(GTK_BOX(hbox), priv->return_button, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), priv->return_button, FALSE, FALSE, 0);
   g_signal_connect(priv->return_button, "pressed", G_CALLBACK(return_button_clicked), self);
 
   /* Delete button */
@@ -778,37 +797,12 @@
   hildon_button_set_image(HILDON_BUTTON(priv->delete_button),
                           gtk_image_new_from_icon_name("general_backspace",
                                                        -1));
+  hildon_button_set_image_alignment(HILDON_BUTTON(priv->delete_button), 1.0, 0.0);
   gtk_widget_set_size_request(priv->delete_button, screen_width*0.15, 70);
-  gtk_box_pack_start(GTK_BOX(hbox), priv->delete_button, TRUE, TRUE, 0);
-  g_signal_connect(priv->delete_button, "pressed", G_CALLBACK(delete_button_clicked), self);
-
-  /* Close button
-   * TODO place it somewhere else */
+  gtk_box_pack_start(GTK_BOX(hbox), priv->delete_button, FALSE, FALSE, 0);
+  g_signal_connect(priv->delete_button, "clicked", G_CALLBACK(delete_button_clicked), self);
   
-  priv->close_button = hildon_button_new(HILDON_SIZE_FINGER_HEIGHT,
-                                         HILDON_BUTTON_ARRANGEMENT_VERTICAL);
-  hildon_button_set_image(HILDON_BUTTON(priv->close_button),
-                          gtk_image_new_from_icon_name("keyboard_close",
-                                                       -1));
-  gtk_widget_set_size_request(priv->close_button, screen_width*0.1, 70);
-  gtk_box_pack_start(GTK_BOX(hbox), priv->close_button, TRUE, TRUE, 0);
-  g_signal_connect(priv->close_button, "pressed", G_CALLBACK(close_fkb), self);
-  
   gtk_box_pack_start(GTK_BOX(priv->vbox), hbox, FALSE, FALSE, 0);
   
   gtk_container_add (GTK_CONTAINER(priv->window), priv->vbox);
-  
-  /* now we create the different layouts
-   * if this is too slow, we could do it on demand */
-  priv->alpha_lower = get_keyboard_layout(self, alpha_lower);
-  priv->alpha_upper = get_keyboard_layout(self, alpha_upper);
-  priv->special_lower = get_keyboard_layout(self, special_lower);
-  priv->special_upper = get_keyboard_layout(self, special_upper);
-  
-  g_object_ref(priv->alpha_lower);
-  g_object_ref(priv->alpha_upper);
-  g_object_ref(priv->special_lower);
-  g_object_ref(priv->special_upper);
-  
-  apply_keyboard_layout(self, priv->alpha_lower);
 }

More information about the maemo-commits mailing list