Mailing List Archive

r19284 - in projects/haf/trunk/hildon-input-method-plugins-example: . src
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);
}

_______________________________________________
maemo-commits mailing list
maemo-commits@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-commits