ibus/ibus-xx-vapi-build-failure.diff

8848 lines
289 KiB
Diff

--- ibus/ui/gtk3/Gkbd-3.0.gi.foo 1970-01-01 09:00:00.000000000 +0900
+++ ibus/ui/gtk3/Gkbd-3.0.gi 2012-03-09 16:09:11.478018975 +0900
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<api version="1.0">
+ <namespace name="Gkbd">
+ <function name="configuration_get" symbol="gkbd_configuration_get">
+ <return-type type="GkbdConfiguration*"/>
+ <parameters/>
+ </function>
+ <object name="GkbdConfiguration"
+ parent="GObject"
+ type-name="GkbdConfiguration"
+ get-type="gkbd_configuration_get_type">
+ <field name="parent" type="GObject"/>
+ <method name="get_short_group_names"
+ symbol="gkbd_configuration_get_short_group_names">
+ <return-type type="gchar**"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ </parameters>
+ </method>
+ <method name="get_group_names"
+ symbol="gkbd_configuration_get_group_names">
+ <return-type type="gchar**"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ </parameters>
+ </method>
+ <method name="lock_group"
+ symbol="gkbd_configuration_lock_group">
+ <return-type type="void"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ <parameter name="group" type="guint"/>
+ </parameters>
+ </method>
+ <method name="start_listen"
+ symbol="gkbd_configuration_start_listen">
+ <return-type type="void"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ </parameters>
+ </method>
+ <method name="stop_listen"
+ symbol="gkbd_configuration_stop_listen">
+ <return-type type="void"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ </parameters>
+ </method>
+ <signal name="changed" when="LAST">
+ <return-type type="void"/>
+ </signal>
+ <signal name="group-changed" when="LAST">
+ <return-type type="void"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ <parameter name="object" type="int"/>
+ </parameters>
+ </signal>
+ <signal name="indicators-changed" when="LAST">
+ <return-type type="void"/>
+ <parameters>
+ <parameter name="configuration"
+ type="GkbdConfiguration*"/>
+ </parameters>
+ </signal>
+ </object>
+ </namespace>
+</api>
--- ibus/ui/gtk3/Gkbd-3.0.metadata.orig 2012-03-09 11:51:03.509354266 +0900
+++ ibus/ui/gtk3/Gkbd-3.0.metadata 2012-03-09 16:27:38.143929799 +0900
@@ -1 +1,4 @@
+Gkbd cheader_filename="libgnomekbd/gkbd-configuration.h"
Configuration cheader_filename="libgnomekbd/gkbd-configuration.h"
+//gkbd_configuration_get_short_group_names type_name="string[]"
+//gkbd_configuration_get_group_names type_name="string[]"
--- ibus/ui/gtk3/Makefile.am.orig 2012-03-09 17:59:30.327728137 +0900
+++ ibus/ui/gtk3/Makefile.am 2012-03-09 18:01:04.274430683 +0900
@@ -85,6 +85,7 @@ AM_VALAFLAGS = \
--pkg=gtk+-3.0 \
--pkg=gdk-x11-3.0 \
--pkg=ibus-1.0 \
+ --pkg=Xkl-1.0 \
$(NULL)
libexec_PROGRAMS = ibus-ui-gtk3
@@ -106,8 +107,12 @@ ibus_ui_gtk3_valas = \
$(NULL)
ibus_ui_gtk3_vala_cfiles = $(ibus_ui_gtk3_valas:.vala=.c)
+#ibus_ui_gtk3_SOURCES = \
+# $(ibus_ui_gtk3_valas) \
+# grabkeycode.c \
+# $(NULL)
ibus_ui_gtk3_SOURCES = \
- $(ibus_ui_gtk3_valas) \
+ $(ibus_ui_gtk3_vala_cfiles) \
grabkeycode.c \
$(NULL)
@@ -133,6 +138,11 @@ AM_VALAFLAGS += \
--pkg=gkbd \
$(NULL)
+# FIXME: Running vapigen Gkbd-3.0.gir cannot resolve the type name error:
+#
+# Xkl-1.0.gir:877.51-877.51: error: The type name `X.XEvent' could not be found
+# <type name="xlib.XEvent" c:type="XEvent*"/>
+# ^
$(srcdir)/gkbd.vapi:
$(VAPIGEN) --metadatadir . --library gkbd \
--pkg gtk+-3.0 --pkg glib-2.0 --pkg gmodule-2.0 \
@@ -141,20 +151,28 @@ $(srcdir)/gkbd.vapi:
$(srcdir)/gkbdlayout.vala: $(srcdir)/gkbd.vapi
@cp $(srcdir)/gkbdlayout.vala.true $(srcdir)/gkbdlayout.vala
+ @cp $(srcdir)/gkbdlayout.c.true $(srcdir)/gkbdlayout.c
else
$(srcdir)/gkbdlayout.vala:
@cp $(srcdir)/gkbdlayout.vala.false $(srcdir)/gkbdlayout.vala
+ @cp $(srcdir)/gkbdlayout.c.false $(srcdir)/gkbdlayout.c
endif
+srcdir)/panel.c: $(srcdir)/panel.c.in
+ @cp $(srcdir)/panel.c.in $(srcdir)/panel.c
+
CLEANFILES = \
- gkbd.vapi \
gkbdlayout.vala \
gtkpanel.xml \
$(ibus_ui_gtk3_vala_cfiles) \
$(NULL)
EXTRA_DIST = \
+ gkbd.vapi \
+ Gkbd-3.0.gi \
Gkbd-3.0.metadata \
+ gkbdlayout.c.false \
+ gkbdlayout.c.true \
gkbdlayout.vala.false \
gkbdlayout.vala.true \
gtkpanel.xml.in.in \
--- ibus/ui/gtk3/gkbd.vapi.foo 1970-01-01 09:00:00.000000000 +0900
+++ ibus/ui/gtk3/gkbd.vapi 2012-03-09 16:30:37.641184566 +0900
@@ -0,0 +1,282 @@
+/* gkbd.vapi generated by vapigen, do not modify. */
+
+[CCode (cprefix = "Gkbd", gir_namespace = "Gkbd", gir_version = "3.0", lower_case_cprefix = "gkbd_")]
+namespace Gkbd {
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", type_id = "gkbd_configuration_get_type ()")]
+ public class Configuration : GLib.Object {
+ [CCode (has_construct_function = false)]
+ protected Configuration ();
+ public void append_object (GLib.Object obj);
+ public static string create_label_title (int group, GLib.HashTable<void*,void*> ln2cnt_map, string layout_name);
+ public string extract_layout_name (int group);
+ public void free_images (GLib.SList<Gdk.Pixbuf> images);
+ public static Gkbd.Configuration @get ();
+ public unowned GLib.SList<GLib.Object> get_all_objects ();
+ public bool get_caps_lock_state ();
+ public uint get_current_group ();
+ public string get_current_tooltip ();
+ public string get_group_name (uint group);
+ [CCode (array_length = false, array_null_terminated = true)]
+ public unowned string[] get_group_names ();
+ public string get_image_filename (uint group);
+ public Gkbd.IndicatorConfig get_indicator_config ();
+ public Gkbd.KeyboardConfig get_keyboard_config ();
+ public bool get_num_lock_state ();
+ public bool get_scroll_lock_state ();
+ [CCode (array_length = false, array_null_terminated = true)]
+ public unowned string[] get_short_group_names ();
+ public unowned Xkl.Engine get_xkl_engine ();
+ public bool if_any_object_exists ();
+ public bool if_flags_shown ();
+ public GLib.SList<Gdk.Pixbuf> load_images ();
+ public void lock_group (uint group);
+ public void lock_next_group ();
+ public void remove_object (GLib.Object obj);
+ public void start_listen ();
+ public void stop_listen ();
+ public signal void changed ();
+ public signal void group_changed (int object);
+ public signal void indicators_changed ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", type_id = "gkbd_indicator_get_type ()")]
+ public class Indicator : Gtk.Notebook, Atk.Implementor, Gtk.Buildable {
+ [CCode (has_construct_function = false, type = "GtkWidget*")]
+ public Indicator ();
+ [CCode (array_length = false, array_null_terminated = true)]
+ public static unowned string[] get_group_names ();
+ public static string get_image_filename (uint group);
+ public static double get_max_width_height_ratio ();
+ public static unowned Xkl.Engine get_xkl_engine ();
+ public void set_angle (double angle);
+ public void set_parent_tooltips (bool ifset);
+ [HasEmitter]
+ public virtual signal void reinit_ui ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", type_id = "gkbd_keyboard_drawing_get_type ()")]
+ public class KeyboardDrawing : Gtk.DrawingArea, Atk.Implementor, Gtk.Buildable {
+ [CCode (has_construct_function = false, type = "GtkWidget*")]
+ public KeyboardDrawing ();
+ [CCode (has_construct_function = false, type = "GtkWidget*")]
+ public KeyboardDrawing.dialog_new ();
+ public static void dialog_set_group (Gtk.Widget dialog, Xkl.ConfigRegistry registry, int group);
+ public static void dialog_set_layout (Gtk.Widget dialog, Xkl.ConfigRegistry registry, string layout);
+ public unowned string get_compat ();
+ public unowned string get_geometry ();
+ public unowned string get_keycodes ();
+ public unowned string get_symbols ();
+ public unowned string get_types ();
+ public void print (Gtk.Window parent_window, string description);
+ public bool render (Cairo.Context cr, Pango.Layout layout, double x, double y, double width, double height, double dpi_x, double dpi_y);
+ public void set_groups_levels (Gkbd.KeyboardDrawingGroupLevel groupLevels);
+ public void set_layout (string id);
+ public void set_track_config (bool enable);
+ public void set_track_modifiers (bool enable);
+ public virtual signal void bad_keycode (uint keycode);
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", type_id = "gkbd_status_get_type ()")]
+ public class Status : Gtk.StatusIcon {
+ [CCode (has_construct_function = false, type = "GtkStatusIcon*")]
+ public Status ();
+ [CCode (array_length = false, array_null_terminated = true)]
+ public static unowned string[] get_group_names ();
+ public static string get_image_filename (uint group);
+ public static unowned Xkl.Engine get_xkl_engine ();
+ public void reinit_ui ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct DesktopConfig {
+ public int default_group;
+ public bool group_per_app;
+ public bool handle_indicators;
+ public bool layout_names_as_group_names;
+ public bool load_extra_items;
+ public weak GLib.Settings settings;
+ public int config_listener_id;
+ public weak Xkl.Engine engine;
+ public bool activate ();
+ public void init (Xkl.Engine engine);
+ public void load ();
+ public bool load_group_descriptions (Xkl.ConfigRegistry registry, string layout_ids, string variant_ids, string short_group_names, string full_group_names);
+ public void lock_next_group ();
+ public void lock_prev_group ();
+ public void restore_group ();
+ public void save ();
+ public void start_listen (GLib.Callback func);
+ public void stop_listen ();
+ public void term ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct IndicatorConfig {
+ public int secondary_groups_mask;
+ public bool show_flags;
+ public weak string font_family;
+ public int font_size;
+ public weak string foreground_color;
+ public weak string background_color;
+ public weak string enabled_plugins;
+ public weak GLib.Settings settings;
+ public weak GLib.SList<void*> image_filenames;
+ public weak Gtk.IconTheme icon_theme;
+ public int config_listener_id;
+ public weak Xkl.Engine engine;
+ public void activate ();
+ public void free_image_filenames ();
+ public string get_fg_color_for_widget (Gtk.Widget widget);
+ public void get_font_for_widget (Gtk.Widget widget, string font_family, int font_size);
+ public string get_images_file (Gkbd.KeyboardConfig kbd_config, int group);
+ public void init (Xkl.Engine engine);
+ public void load ();
+ public void load_image_filenames (Gkbd.KeyboardConfig kbd_config);
+ public void refresh_style ();
+ public void save ();
+ public void start_listen (GLib.Callback func);
+ public void stop_listen ();
+ public void term ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct IndicatorPlugin {
+ public weak string name;
+ public weak string description;
+ public weak Gkbd.IndicatorPluginInitFunc init_callback;
+ public weak Gkbd.IndicatorPluginTermFunc term_callback;
+ public weak Gkbd.IndicatorPluginConfigureProperties configure_properties_callback;
+ public weak Gkbd.IndicatorPluginGroupChangedFunc group_changed_callback;
+ public weak Gkbd.IndicatorPluginWindowCreatedFunc window_created_callback;
+ public weak Gkbd.IndicatorPluginConfigChangedFunc config_changed_callback;
+ public static uint get_num_groups (Gkbd.IndicatorPluginContainer pc);
+ [CCode (array_length = false, array_null_terminated = true)]
+ public static unowned string[] load_localized_group_names (Gkbd.IndicatorPluginContainer pc);
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct IndicatorPluginContainer {
+ public weak GLib.Settings settings;
+ public void init ();
+ public void reinit_ui ();
+ public void term ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct IndicatorPluginManager {
+ public weak GLib.HashTable<void*,void*> all_plugin_recs;
+ public weak GLib.SList<void*> inited_plugin_recs;
+ public void config_changed (Gkbd.KeyboardConfig from, Gkbd.KeyboardConfig to);
+ public void configure_plugin (Gkbd.IndicatorPluginContainer pc, string full_path, Gtk.Window parent);
+ public Gtk.Widget decorate_widget (Gtk.Widget widget, int group, string group_description, Gkbd.KeyboardConfig config);
+ public void demote_plugin (string enabled_plugins, string full_path);
+ public void disable_plugin (string enabled_plugins, string full_path);
+ public void enable_plugin (string enabled_plugins, string full_path);
+ public Gkbd.IndicatorPlugin get_plugin (string full_path);
+ public void group_changed (Gtk.Widget notebook, int new_group);
+ public void init ();
+ public void init_enabled_plugins (Gkbd.IndicatorPluginContainer pc, string enabled_plugins);
+ public void promote_plugin (string enabled_plugins, string full_path);
+ public void term ();
+ public void term_initialized_plugins ();
+ public void toggle_plugins (Gkbd.IndicatorPluginContainer pc, string enabled_plugins);
+ public int window_created (X.Window win, X.Window parent);
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct IndicatorPluginManagerRecord {
+ public weak string full_path;
+ public weak GLib.Module module;
+ public Gkbd.IndicatorPlugin plugin;
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardConfig {
+ public weak string model;
+ public weak string layouts_variants;
+ public weak string options;
+ public weak GLib.Settings settings;
+ public int config_listener_id;
+ public weak Xkl.Engine engine;
+ public bool activate ();
+ [CCode (array_length = false, array_null_terminated = true)]
+ public static string[] add_default_switch_option_if_necessary (string layouts_list, string options_list, bool was_appended);
+ public bool equals (Gkbd.KeyboardConfig kbd_config2);
+ public static unowned string format_full_description (string layout_descr, string variant_descr);
+ public static bool get_descriptions (Xkl.ConfigRegistry config_registry, string name, string layout_short_descr, string layout_descr, string variant_short_descr, string variant_descr);
+ public void init (Xkl.Engine engine);
+ public void load (Gkbd.KeyboardConfig kbd_config_default);
+ public void load_from_x_current (Xkl.ConfigRec buf);
+ public void load_from_x_initial (Xkl.ConfigRec buf);
+ public static unowned string merge_items (string parent, string child);
+ public void save ();
+ public static bool split_items (string merged, string parent, string child);
+ public void start_listen (GLib.Callback func);
+ public void stop_listen ();
+ public void term ();
+ public string to_string ();
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardDrawingDoodad {
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardDrawingGroupLevel {
+ public int group;
+ public int level;
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardDrawingItem {
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardDrawingKey {
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_type_id = false)]
+ public struct KeyboardDrawingRenderContext {
+ public weak Cairo.Context cr;
+ public int angle;
+ public weak Pango.Layout layout;
+ public weak Pango.FontDescription font_desc;
+ public int scale_numerator;
+ public int scale_denominator;
+ public Gdk.RGBA dark_color;
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", cprefix = "GKBD_KEYBOARD_DRAWING_POS_")]
+ public enum KeyboardDrawingGroupLevelPosition {
+ TOPLEFT,
+ TOPRIGHT,
+ BOTTOMLEFT,
+ BOTTOMRIGHT,
+ TOTAL,
+ FIRST,
+ LAST
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", cprefix = "GKBD_KEYBOARD_DRAWING_ITEM_TYPE_")]
+ public enum KeyboardDrawingItemType {
+ INVALID,
+ KEY,
+ KEY_EXTRA,
+ DOODAD
+ }
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate void IndicatorPluginConfigChangedFunc (Gkbd.KeyboardConfig from, Gkbd.KeyboardConfig to);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate void IndicatorPluginConfigureProperties (Gkbd.IndicatorPluginContainer pc, Gtk.Window parent);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate void* IndicatorPluginGetPluginFunc ();
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate void IndicatorPluginGroupChangedFunc (Gtk.Widget notebook, int new_group);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate bool IndicatorPluginInitFunc (Gkbd.IndicatorPluginContainer pc);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate void IndicatorPluginTermFunc ();
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", has_target = false)]
+ public delegate int IndicatorPluginWindowCreatedFunc (X.Window win, X.Window parent);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", cname = "GKBD_DESKTOP_SCHEMA")]
+ public const string DESKTOP_SCHEMA;
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", cname = "GKBD_KEYBOARD_DRAWING_H")]
+ public const int KEYBOARD_DRAWING_H;
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h", cname = "GKBD_KEYBOARD_SCHEMA")]
+ public const string KEYBOARD_SCHEMA;
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static void install_glib_log_appender ();
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static Gdk.Rectangle preview_load_position ();
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static void preview_save_position (Gdk.Rectangle rect);
+ [CCode (array_length = false, array_null_terminated = true, cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static string[] strv_append (string arr, string element);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static void strv_behead (string arr);
+ [CCode (cheader_filename = "libgnomekbd/gkbd-configuration.h")]
+ public static bool strv_remove (string arr, string element);
+}
--- ibus/ui/gtk3/gkbdlayout.c.false.orig 2012-03-09 16:42:59.688639882 +0900
+++ ibus/ui/gtk3/gkbdlayout.c.false 2012-03-09 16:42:53.950535836 +0900
@@ -0,0 +1,307 @@
+/* gkbdlayout.c generated by valac 0.15.1, the Vala compiler
+ * generated from gkbdlayout.vala, do not modify */
+
+/* vim:set et sts=4 sw=4:
+ *
+ * ibus - The Input Bus
+ *
+ * Copyright 2012 Red Hat, Inc.
+ * Copyright(c) 2012 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright(c) 2012 Takao Fujiwara <tfujiwar@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or(at your option) any later version.
+ *
+ * This library 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_GKBD_LAYOUT (gkbd_layout_get_type ())
+#define GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GKBD_LAYOUT, GkbdLayout))
+#define GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+#define IS_GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GKBD_LAYOUT))
+#define IS_GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GKBD_LAYOUT))
+#define GKBD_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+
+typedef struct _GkbdLayout GkbdLayout;
+typedef struct _GkbdLayoutClass GkbdLayoutClass;
+typedef struct _GkbdLayoutPrivate GkbdLayoutPrivate;
+typedef struct _ParamSpecGkbdLayout ParamSpecGkbdLayout;
+
+struct _GkbdLayout {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ GkbdLayoutPrivate * priv;
+};
+
+struct _GkbdLayoutClass {
+ GTypeClass parent_class;
+ void (*finalize) (GkbdLayout *self);
+};
+
+struct _ParamSpecGkbdLayout {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer gkbd_layout_parent_class = NULL;
+
+gpointer gkbd_layout_ref (gpointer instance);
+void gkbd_layout_unref (gpointer instance);
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_gkbd_layout (GValue* value, gpointer v_object);
+void value_take_gkbd_layout (GValue* value, gpointer v_object);
+gpointer value_get_gkbd_layout (const GValue* value);
+GType gkbd_layout_get_type (void) G_GNUC_CONST;
+enum {
+ GKBD_LAYOUT_DUMMY_PROPERTY
+};
+GkbdLayout* gkbd_layout_new (void);
+GkbdLayout* gkbd_layout_construct (GType object_type);
+gchar** gkbd_layout_get_layouts (GkbdLayout* self, int* result_length1);
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1);
+void gkbd_layout_lock_group (GkbdLayout* self, gint id);
+void gkbd_layout_start_listen (GkbdLayout* self);
+void gkbd_layout_stop_listen (GkbdLayout* self);
+static void gkbd_layout_finalize (GkbdLayout* obj);
+
+
+GkbdLayout* gkbd_layout_construct (GType object_type) {
+ GkbdLayout* self = NULL;
+ self = (GkbdLayout*) g_type_create_instance (object_type);
+ return self;
+}
+
+
+GkbdLayout* gkbd_layout_new (void) {
+ return gkbd_layout_construct (TYPE_GKBD_LAYOUT);
+}
+
+
+gchar** gkbd_layout_get_layouts (GkbdLayout* self, int* result_length1) {
+ gchar** result = NULL;
+ gchar** _tmp0_ = NULL;
+ gchar** _tmp1_;
+ gint _tmp1__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = g_new0 (gchar*, 0 + 1);
+ _tmp1_ = _tmp0_;
+ _tmp1__length1 = 0;
+ if (result_length1) {
+ *result_length1 = _tmp1__length1;
+ }
+ result = _tmp1_;
+ return result;
+}
+
+
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1) {
+ gchar** result = NULL;
+ gchar** _tmp0_ = NULL;
+ gchar** _tmp1_;
+ gint _tmp1__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = g_new0 (gchar*, 0 + 1);
+ _tmp1_ = _tmp0_;
+ _tmp1__length1 = 0;
+ if (result_length1) {
+ *result_length1 = _tmp1__length1;
+ }
+ result = _tmp1_;
+ return result;
+}
+
+
+void gkbd_layout_lock_group (GkbdLayout* self, gint id) {
+ g_return_if_fail (self != NULL);
+}
+
+
+void gkbd_layout_start_listen (GkbdLayout* self) {
+ g_return_if_fail (self != NULL);
+}
+
+
+void gkbd_layout_stop_listen (GkbdLayout* self) {
+ g_return_if_fail (self != NULL);
+}
+
+
+static void value_gkbd_layout_init (GValue* value) {
+ value->data[0].v_pointer = NULL;
+}
+
+
+static void value_gkbd_layout_free_value (GValue* value) {
+ if (value->data[0].v_pointer) {
+ gkbd_layout_unref (value->data[0].v_pointer);
+ }
+}
+
+
+static void value_gkbd_layout_copy_value (const GValue* src_value, GValue* dest_value) {
+ if (src_value->data[0].v_pointer) {
+ dest_value->data[0].v_pointer = gkbd_layout_ref (src_value->data[0].v_pointer);
+ } else {
+ dest_value->data[0].v_pointer = NULL;
+ }
+}
+
+
+static gpointer value_gkbd_layout_peek_pointer (const GValue* value) {
+ return value->data[0].v_pointer;
+}
+
+
+static gchar* value_gkbd_layout_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ if (collect_values[0].v_pointer) {
+ GkbdLayout* object;
+ object = collect_values[0].v_pointer;
+ if (object->parent_instance.g_class == NULL) {
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ }
+ value->data[0].v_pointer = gkbd_layout_ref (object);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ return NULL;
+}
+
+
+static gchar* value_gkbd_layout_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ GkbdLayout** object_p;
+ object_p = collect_values[0].v_pointer;
+ if (!object_p) {
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+ }
+ if (!value->data[0].v_pointer) {
+ *object_p = NULL;
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+ *object_p = value->data[0].v_pointer;
+ } else {
+ *object_p = gkbd_layout_ref (value->data[0].v_pointer);
+ }
+ return NULL;
+}
+
+
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecGkbdLayout* spec;
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_GKBD_LAYOUT), NULL);
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+ G_PARAM_SPEC (spec)->value_type = object_type;
+ return G_PARAM_SPEC (spec);
+}
+
+
+gpointer value_get_gkbd_layout (const GValue* value) {
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT), NULL);
+ return value->data[0].v_pointer;
+}
+
+
+void value_set_gkbd_layout (GValue* value, gpointer v_object) {
+ GkbdLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_GKBD_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ gkbd_layout_ref (value->data[0].v_pointer);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ gkbd_layout_unref (old);
+ }
+}
+
+
+void value_take_gkbd_layout (GValue* value, gpointer v_object) {
+ GkbdLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_GKBD_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ gkbd_layout_unref (old);
+ }
+}
+
+
+static void gkbd_layout_class_init (GkbdLayoutClass * klass) {
+ gkbd_layout_parent_class = g_type_class_peek_parent (klass);
+ GKBD_LAYOUT_CLASS (klass)->finalize = gkbd_layout_finalize;
+ g_signal_new ("changed", TYPE_GKBD_LAYOUT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g_signal_new ("group_changed", TYPE_GKBD_LAYOUT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+
+static void gkbd_layout_instance_init (GkbdLayout * self) {
+ self->ref_count = 1;
+}
+
+
+static void gkbd_layout_finalize (GkbdLayout* obj) {
+ GkbdLayout * self;
+ self = GKBD_LAYOUT (obj);
+}
+
+
+GType gkbd_layout_get_type (void) {
+ static volatile gsize gkbd_layout_type_id__volatile = 0;
+ if (g_once_init_enter (&gkbd_layout_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_gkbd_layout_init, value_gkbd_layout_free_value, value_gkbd_layout_copy_value, value_gkbd_layout_peek_pointer, "p", value_gkbd_layout_collect_value, "p", value_gkbd_layout_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (GkbdLayoutClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gkbd_layout_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GkbdLayout), 0, (GInstanceInitFunc) gkbd_layout_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType gkbd_layout_type_id;
+ gkbd_layout_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GkbdLayout", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&gkbd_layout_type_id__volatile, gkbd_layout_type_id);
+ }
+ return gkbd_layout_type_id__volatile;
+}
+
+
+gpointer gkbd_layout_ref (gpointer instance) {
+ GkbdLayout* self;
+ self = instance;
+ g_atomic_int_inc (&self->ref_count);
+ return instance;
+}
+
+
+void gkbd_layout_unref (gpointer instance) {
+ GkbdLayout* self;
+ self = instance;
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ GKBD_LAYOUT_GET_CLASS (self)->finalize (self);
+ g_type_free_instance ((GTypeInstance *) self);
+ }
+}
+
+
+
--- ibus/ui/gtk3/gkbdlayout.c.true.orig 2012-03-09 16:41:03.415531538 +0900
+++ ibus/ui/gtk3/gkbdlayout.c.true 2012-03-09 16:40:45.672209805 +0900
@@ -0,0 +1,490 @@
+/* gkbdlayout.c generated by valac 0.15.1, the Vala compiler
+ * generated from gkbdlayout.vala, do not modify */
+
+/* vim:set et sts=4 sw=4:
+ *
+ * ibus - The Input Bus
+ *
+ * Copyright 2012 Red Hat, Inc.
+ * Copyright(c) 2012 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright(c) 2012 Takao Fujiwara <tfujiwar@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or(at your option) any later version.
+ *
+ * This library 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <libgnomekbd/gkbd-configuration.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_GKBD_LAYOUT (gkbd_layout_get_type ())
+#define GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GKBD_LAYOUT, GkbdLayout))
+#define GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+#define IS_GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GKBD_LAYOUT))
+#define IS_GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GKBD_LAYOUT))
+#define GKBD_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+
+typedef struct _GkbdLayout GkbdLayout;
+typedef struct _GkbdLayoutClass GkbdLayoutClass;
+typedef struct _GkbdLayoutPrivate GkbdLayoutPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+typedef struct _ParamSpecGkbdLayout ParamSpecGkbdLayout;
+
+struct _GkbdLayout {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ GkbdLayoutPrivate * priv;
+};
+
+struct _GkbdLayoutClass {
+ GTypeClass parent_class;
+ void (*finalize) (GkbdLayout *self);
+};
+
+struct _GkbdLayoutPrivate {
+ GkbdConfiguration* m_config;
+};
+
+struct _ParamSpecGkbdLayout {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer gkbd_layout_parent_class = NULL;
+
+gpointer gkbd_layout_ref (gpointer instance);
+void gkbd_layout_unref (gpointer instance);
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_gkbd_layout (GValue* value, gpointer v_object);
+void value_take_gkbd_layout (GValue* value, gpointer v_object);
+gpointer value_get_gkbd_layout (const GValue* value);
+GType gkbd_layout_get_type (void) G_GNUC_CONST;
+#define GKBD_LAYOUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_GKBD_LAYOUT, GkbdLayoutPrivate))
+enum {
+ GKBD_LAYOUT_DUMMY_PROPERTY
+};
+static void gkbd_layout_config_changed_cb (GkbdLayout* self);
+static void _gkbd_layout_config_changed_cb_gkbd_configuration_changed (GkbdConfiguration* _sender, gpointer self);
+static void gkbd_layout_config_group_changed_cb (GkbdLayout* self, gint object);
+static void _gkbd_layout_config_group_changed_cb_gkbd_configuration_group_changed (GkbdConfiguration* _sender, gint object, gpointer self);
+GkbdLayout* gkbd_layout_new (void);
+GkbdLayout* gkbd_layout_construct (GType object_type);
+gchar** gkbd_layout_get_layouts (GkbdLayout* self, int* result_length1);
+static gchar** _vala_array_dup2 (gchar** self, int length);
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1);
+static gchar** _vala_array_dup3 (gchar** self, int length);
+void gkbd_layout_lock_group (GkbdLayout* self, gint id);
+void gkbd_layout_start_listen (GkbdLayout* self);
+void gkbd_layout_stop_listen (GkbdLayout* self);
+static void gkbd_layout_finalize (GkbdLayout* obj);
+static gint _vala_array_length (gpointer array);
+
+
+static void _gkbd_layout_config_changed_cb_gkbd_configuration_changed (GkbdConfiguration* _sender, gpointer self) {
+ gkbd_layout_config_changed_cb (self);
+}
+
+
+static void _gkbd_layout_config_group_changed_cb_gkbd_configuration_group_changed (GkbdConfiguration* _sender, gint object, gpointer self) {
+ gkbd_layout_config_group_changed_cb (self, object);
+}
+
+
+GkbdLayout* gkbd_layout_construct (GType object_type) {
+ GkbdLayout* self = NULL;
+ GkbdConfiguration* _tmp0_ = NULL;
+ GkbdConfiguration* _tmp1_;
+ self = (GkbdLayout*) g_type_create_instance (object_type);
+ _tmp0_ = gkbd_configuration_get ();
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_config = _tmp0_;
+ _tmp1_ = self->priv->m_config;
+ if (_tmp1_ != NULL) {
+ GkbdConfiguration* _tmp2_;
+ GkbdConfiguration* _tmp3_;
+ _tmp2_ = self->priv->m_config;
+ g_signal_connect (_tmp2_, "changed", (GCallback) _gkbd_layout_config_changed_cb_gkbd_configuration_changed, self);
+ _tmp3_ = self->priv->m_config;
+ g_signal_connect (_tmp3_, "group-changed", (GCallback) _gkbd_layout_config_group_changed_cb_gkbd_configuration_group_changed, self);
+ }
+ return self;
+}
+
+
+GkbdLayout* gkbd_layout_new (void) {
+ return gkbd_layout_construct (TYPE_GKBD_LAYOUT);
+}
+
+
+static void gkbd_layout_config_changed_cb (GkbdLayout* self) {
+ g_return_if_fail (self != NULL);
+ g_signal_emit_by_name (self, "changed");
+}
+
+
+static void gkbd_layout_config_group_changed_cb (GkbdLayout* self, gint object) {
+ gint _tmp0_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = object;
+ g_signal_emit_by_name (self, "group-changed", _tmp0_);
+}
+
+
+static gchar** _vala_array_dup2 (gchar** self, int length) {
+ gchar** result;
+ int i;
+ result = g_new0 (gchar*, length + 1);
+ for (i = 0; i < length; i++) {
+ gchar* _tmp0_;
+ _tmp0_ = g_strdup (self[i]);
+ result[i] = _tmp0_;
+ }
+ return result;
+}
+
+
+gchar** gkbd_layout_get_layouts (GkbdLayout* self, int* result_length1) {
+ gchar** result = NULL;
+ GkbdConfiguration* _tmp0_;
+ GkbdConfiguration* _tmp3_;
+ gchar** _tmp4_;
+ gchar** _tmp5_ = NULL;
+ gchar** _tmp6_;
+ gint _tmp6__length1;
+ gchar** _tmp7_;
+ gint _tmp7__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ gchar** _tmp1_ = NULL;
+ gchar** _tmp2_;
+ gint _tmp2__length1;
+ _tmp1_ = g_new0 (gchar*, 0 + 1);
+ _tmp2_ = _tmp1_;
+ _tmp2__length1 = 0;
+ if (result_length1) {
+ *result_length1 = _tmp2__length1;
+ }
+ result = _tmp2_;
+ return result;
+ }
+ _tmp3_ = self->priv->m_config;
+ _tmp5_ = _tmp4_ = gkbd_configuration_get_short_group_names (_tmp3_);
+ _tmp6_ = (_tmp5_ != NULL) ? _vala_array_dup2 (_tmp5_, _vala_array_length (_tmp4_)) : ((gpointer) _tmp5_);
+ _tmp6__length1 = _vala_array_length (_tmp4_);
+ _tmp7_ = _tmp6_;
+ _tmp7__length1 = _tmp6__length1;
+ if (result_length1) {
+ *result_length1 = _tmp7__length1;
+ }
+ result = _tmp7_;
+ return result;
+}
+
+
+static gchar** _vala_array_dup3 (gchar** self, int length) {
+ gchar** result;
+ int i;
+ result = g_new0 (gchar*, length + 1);
+ for (i = 0; i < length; i++) {
+ gchar* _tmp0_;
+ _tmp0_ = g_strdup (self[i]);
+ result[i] = _tmp0_;
+ }
+ return result;
+}
+
+
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1) {
+ gchar** result = NULL;
+ GkbdConfiguration* _tmp0_;
+ GkbdConfiguration* _tmp3_;
+ gchar** _tmp4_;
+ gchar** _tmp5_ = NULL;
+ gchar** _tmp6_;
+ gint _tmp6__length1;
+ gchar** _tmp7_;
+ gint _tmp7__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ gchar** _tmp1_ = NULL;
+ gchar** _tmp2_;
+ gint _tmp2__length1;
+ _tmp1_ = g_new0 (gchar*, 0 + 1);
+ _tmp2_ = _tmp1_;
+ _tmp2__length1 = 0;
+ if (result_length1) {
+ *result_length1 = _tmp2__length1;
+ }
+ result = _tmp2_;
+ return result;
+ }
+ _tmp3_ = self->priv->m_config;
+ _tmp5_ = _tmp4_ = gkbd_configuration_get_group_names (_tmp3_);
+ _tmp6_ = (_tmp5_ != NULL) ? _vala_array_dup3 (_tmp5_, _vala_array_length (_tmp4_)) : ((gpointer) _tmp5_);
+ _tmp6__length1 = _vala_array_length (_tmp4_);
+ _tmp7_ = _tmp6_;
+ _tmp7__length1 = _tmp6__length1;
+ if (result_length1) {
+ *result_length1 = _tmp7__length1;
+ }
+ result = _tmp7_;
+ return result;
+}
+
+
+void gkbd_layout_lock_group (GkbdLayout* self, gint id) {
+ GkbdConfiguration* _tmp0_;
+ GkbdConfiguration* _tmp1_;
+ gint _tmp2_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ return;
+ }
+ _tmp1_ = self->priv->m_config;
+ _tmp2_ = id;
+ gkbd_configuration_lock_group (_tmp1_, (guint) _tmp2_);
+}
+
+
+void gkbd_layout_start_listen (GkbdLayout* self) {
+ GkbdConfiguration* _tmp0_;
+ GkbdConfiguration* _tmp1_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ return;
+ }
+ _tmp1_ = self->priv->m_config;
+ gkbd_configuration_start_listen (_tmp1_);
+}
+
+
+void gkbd_layout_stop_listen (GkbdLayout* self) {
+ GkbdConfiguration* _tmp0_;
+ GkbdConfiguration* _tmp1_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ return;
+ }
+ _tmp1_ = self->priv->m_config;
+ gkbd_configuration_stop_listen (_tmp1_);
+}
+
+
+static void value_gkbd_layout_init (GValue* value) {
+ value->data[0].v_pointer = NULL;
+}
+
+
+static void value_gkbd_layout_free_value (GValue* value) {
+ if (value->data[0].v_pointer) {
+ gkbd_layout_unref (value->data[0].v_pointer);
+ }
+}
+
+
+static void value_gkbd_layout_copy_value (const GValue* src_value, GValue* dest_value) {
+ if (src_value->data[0].v_pointer) {
+ dest_value->data[0].v_pointer = gkbd_layout_ref (src_value->data[0].v_pointer);
+ } else {
+ dest_value->data[0].v_pointer = NULL;
+ }
+}
+
+
+static gpointer value_gkbd_layout_peek_pointer (const GValue* value) {
+ return value->data[0].v_pointer;
+}
+
+
+static gchar* value_gkbd_layout_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ if (collect_values[0].v_pointer) {
+ GkbdLayout* object;
+ object = collect_values[0].v_pointer;
+ if (object->parent_instance.g_class == NULL) {
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ }
+ value->data[0].v_pointer = gkbd_layout_ref (object);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ return NULL;
+}
+
+
+static gchar* value_gkbd_layout_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ GkbdLayout** object_p;
+ object_p = collect_values[0].v_pointer;
+ if (!object_p) {
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+ }
+ if (!value->data[0].v_pointer) {
+ *object_p = NULL;
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+ *object_p = value->data[0].v_pointer;
+ } else {
+ *object_p = gkbd_layout_ref (value->data[0].v_pointer);
+ }
+ return NULL;
+}
+
+
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecGkbdLayout* spec;
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_GKBD_LAYOUT), NULL);
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+ G_PARAM_SPEC (spec)->value_type = object_type;
+ return G_PARAM_SPEC (spec);
+}
+
+
+gpointer value_get_gkbd_layout (const GValue* value) {
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT), NULL);
+ return value->data[0].v_pointer;
+}
+
+
+void value_set_gkbd_layout (GValue* value, gpointer v_object) {
+ GkbdLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_GKBD_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ gkbd_layout_ref (value->data[0].v_pointer);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ gkbd_layout_unref (old);
+ }
+}
+
+
+void value_take_gkbd_layout (GValue* value, gpointer v_object) {
+ GkbdLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_GKBD_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_GKBD_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ gkbd_layout_unref (old);
+ }
+}
+
+
+static void gkbd_layout_class_init (GkbdLayoutClass * klass) {
+ gkbd_layout_parent_class = g_type_class_peek_parent (klass);
+ GKBD_LAYOUT_CLASS (klass)->finalize = gkbd_layout_finalize;
+ g_type_class_add_private (klass, sizeof (GkbdLayoutPrivate));
+ g_signal_new ("changed", TYPE_GKBD_LAYOUT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+ g_signal_new ("group_changed", TYPE_GKBD_LAYOUT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+
+static void gkbd_layout_instance_init (GkbdLayout * self) {
+ self->priv = GKBD_LAYOUT_GET_PRIVATE (self);
+ self->priv->m_config = NULL;
+ self->ref_count = 1;
+}
+
+
+static void gkbd_layout_finalize (GkbdLayout* obj) {
+ GkbdLayout * self;
+ GkbdConfiguration* _tmp0_;
+ self = GKBD_LAYOUT (obj);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ != NULL) {
+ GkbdConfiguration* _tmp1_;
+ guint _tmp2_ = 0U;
+ GkbdConfiguration* _tmp3_;
+ guint _tmp4_ = 0U;
+ GkbdConfiguration* _tmp5_;
+ _tmp1_ = self->priv->m_config;
+ g_signal_parse_name ("changed", gkbd_configuration_get_type (), &_tmp2_, NULL, FALSE);
+ g_signal_handlers_disconnect_matched (_tmp1_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _gkbd_layout_config_changed_cb_gkbd_configuration_changed, self);
+ _tmp3_ = self->priv->m_config;
+ g_signal_parse_name ("group-changed", gkbd_configuration_get_type (), &_tmp4_, NULL, FALSE);
+ g_signal_handlers_disconnect_matched (_tmp3_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp4_, 0, NULL, (GCallback) _gkbd_layout_config_group_changed_cb_gkbd_configuration_group_changed, self);
+ _tmp5_ = self->priv->m_config;
+ g_object_ref ((GObject*) _tmp5_);
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_config = NULL;
+ }
+ _g_object_unref0 (self->priv->m_config);
+}
+
+
+GType gkbd_layout_get_type (void) {
+ static volatile gsize gkbd_layout_type_id__volatile = 0;
+ if (g_once_init_enter (&gkbd_layout_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_gkbd_layout_init, value_gkbd_layout_free_value, value_gkbd_layout_copy_value, value_gkbd_layout_peek_pointer, "p", value_gkbd_layout_collect_value, "p", value_gkbd_layout_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (GkbdLayoutClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gkbd_layout_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GkbdLayout), 0, (GInstanceInitFunc) gkbd_layout_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType gkbd_layout_type_id;
+ gkbd_layout_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GkbdLayout", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&gkbd_layout_type_id__volatile, gkbd_layout_type_id);
+ }
+ return gkbd_layout_type_id__volatile;
+}
+
+
+gpointer gkbd_layout_ref (gpointer instance) {
+ GkbdLayout* self;
+ self = instance;
+ g_atomic_int_inc (&self->ref_count);
+ return instance;
+}
+
+
+void gkbd_layout_unref (gpointer instance) {
+ GkbdLayout* self;
+ self = instance;
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ GKBD_LAYOUT_GET_CLASS (self)->finalize (self);
+ g_type_free_instance ((GTypeInstance *) self);
+ }
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+
--- ibus/ui/gtk3/panel.c.in.orig 2012-03-09 17:06:03.339547266 +0900
+++ ibus/ui/gtk3/panel.c.in 2012-03-09 17:05:53.708372747 +0900
@@ -0,0 +1,3203 @@
+/* panel.c generated by valac 0.15.1, the Vala compiler
+ * generated from panel.vala, do not modify */
+
+/* vim:set et sts=4 sw=4:
+ *
+ * ibus - The Input Bus
+ *
+ * Copyright(c) 2011 Peng Huang <shawn.p.huang@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or(at your option) any later version.
+ *
+ * This library 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <ibus.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <gdk/gdk.h>
+#include <float.h>
+#include <math.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <glib/gi18n-lib.h>
+
+
+#define TYPE_PANEL (panel_get_type ())
+#define PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PANEL, Panel))
+#define PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PANEL, PanelClass))
+#define IS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PANEL))
+#define IS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PANEL))
+#define PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PANEL, PanelClass))
+
+typedef struct _Panel Panel;
+typedef struct _PanelClass PanelClass;
+typedef struct _PanelPrivate PanelPrivate;
+
+#define TYPE_CANDIDATE_PANEL (candidate_panel_get_type ())
+#define CANDIDATE_PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CANDIDATE_PANEL, CandidatePanel))
+#define CANDIDATE_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CANDIDATE_PANEL, CandidatePanelClass))
+#define IS_CANDIDATE_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CANDIDATE_PANEL))
+#define IS_CANDIDATE_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CANDIDATE_PANEL))
+#define CANDIDATE_PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CANDIDATE_PANEL, CandidatePanelClass))
+
+typedef struct _CandidatePanel CandidatePanel;
+typedef struct _CandidatePanelClass CandidatePanelClass;
+
+#define TYPE_SWITCHER (switcher_get_type ())
+#define SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SWITCHER, Switcher))
+#define SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SWITCHER, SwitcherClass))
+#define IS_SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SWITCHER))
+#define IS_SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SWITCHER))
+#define SWITCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SWITCHER, SwitcherClass))
+
+typedef struct _Switcher Switcher;
+typedef struct _SwitcherClass SwitcherClass;
+
+#define TYPE_PROPERTY_MANAGER (property_manager_get_type ())
+#define PROPERTY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROPERTY_MANAGER, PropertyManager))
+#define PROPERTY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROPERTY_MANAGER, PropertyManagerClass))
+#define IS_PROPERTY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROPERTY_MANAGER))
+#define IS_PROPERTY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROPERTY_MANAGER))
+#define PROPERTY_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PROPERTY_MANAGER, PropertyManagerClass))
+
+typedef struct _PropertyManager PropertyManager;
+typedef struct _PropertyManagerClass PropertyManagerClass;
+
+#define TYPE_GKBD_LAYOUT (gkbd_layout_get_type ())
+#define GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GKBD_LAYOUT, GkbdLayout))
+#define GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+#define IS_GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GKBD_LAYOUT))
+#define IS_GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GKBD_LAYOUT))
+#define GKBD_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+
+typedef struct _GkbdLayout GkbdLayout;
+typedef struct _GkbdLayoutClass GkbdLayoutClass;
+
+#define TYPE_XKB_LAYOUT (xkb_layout_get_type ())
+#define XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_XKB_LAYOUT, XKBLayout))
+#define XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_XKB_LAYOUT, XKBLayoutClass))
+#define IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_XKB_LAYOUT))
+#define IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_XKB_LAYOUT))
+#define XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_XKB_LAYOUT, XKBLayoutClass))
+
+typedef struct _XKBLayout XKBLayout;
+typedef struct _XKBLayoutClass XKBLayoutClass;
+
+#define TYPE_KEYBINDING_MANAGER (keybinding_manager_get_type ())
+#define KEYBINDING_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_KEYBINDING_MANAGER, KeybindingManager))
+#define KEYBINDING_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_KEYBINDING_MANAGER, KeybindingManagerClass))
+#define IS_KEYBINDING_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_KEYBINDING_MANAGER))
+#define IS_KEYBINDING_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_KEYBINDING_MANAGER))
+#define KEYBINDING_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_KEYBINDING_MANAGER, KeybindingManagerClass))
+
+typedef struct _KeybindingManager KeybindingManager;
+typedef struct _KeybindingManagerClass KeybindingManagerClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _gkbd_layout_unref0(var) ((var == NULL) ? NULL : (var = (gkbd_layout_unref (var), NULL)))
+#define _xkb_layout_unref0(var) ((var == NULL) ? NULL : (var = (xkb_layout_unref (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _property_manager_unref0(var) ((var == NULL) ? NULL : (var = (property_manager_unref (var), NULL)))
+#define _g_timer_destroy0(var) ((var == NULL) ? NULL : (var = (g_timer_destroy (var), NULL)))
+#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
+#define __g_list_free__g_free0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_free0_ (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+typedef struct _Block4Data Block4Data;
+
+#define TYPE_ICON_WIDGET (icon_widget_get_type ())
+#define ICON_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ICON_WIDGET, IconWidget))
+#define ICON_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ICON_WIDGET, IconWidgetClass))
+#define IS_ICON_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ICON_WIDGET))
+#define IS_ICON_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ICON_WIDGET))
+#define ICON_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ICON_WIDGET, IconWidgetClass))
+
+typedef struct _IconWidget IconWidget;
+typedef struct _IconWidgetClass IconWidgetClass;
+
+struct _Panel {
+ IBusPanelService parent_instance;
+ PanelPrivate * priv;
+};
+
+struct _PanelClass {
+ IBusPanelServiceClass parent_class;
+};
+
+struct _PanelPrivate {
+ IBusBus* m_bus;
+ IBusConfig* m_config;
+ GtkStatusIcon* m_status_icon;
+ GtkMenu* m_ime_menu;
+ GtkMenu* m_sys_menu;
+ IBusEngineDesc** m_engines;
+ gint m_engines_length1;
+ gint _m_engines_size_;
+ CandidatePanel* m_candidate_panel;
+ Switcher* m_switcher;
+ PropertyManager* m_property_manager;
+ GPid m_setup_pid;
+ GtkAboutDialog* m_about_dialog;
+ GkbdLayout* m_gkbdlayout;
+ XKBLayout* m_xkblayout;
+ gchar** m_layouts;
+ gint m_layouts_length1;
+ gint _m_layouts_size_;
+ gchar** m_variants;
+ gint m_variants_length1;
+ gint _m_variants_size_;
+ gint m_fallback_lock_id;
+ gboolean m_changed_xkb_option;
+ GTimer* m_changed_layout_timer;
+ gchar** ACCELERATOR_IME_HOTKEYS;
+ gint ACCELERATOR_IME_HOTKEYS_length1;
+ gint _ACCELERATOR_IME_HOTKEYS_size_;
+};
+
+typedef void (*KeybindingManagerKeybindingHandlerFunc) (GdkEvent* event, void* user_data);
+struct _Block4Data {
+ int _ref_count_;
+ Panel * self;
+ IBusEngineDesc* e;
+};
+
+
+static gpointer panel_parent_class = NULL;
+
+GType panel_get_type (void) G_GNUC_CONST;
+GType candidate_panel_get_type (void) G_GNUC_CONST;
+GType switcher_get_type (void) G_GNUC_CONST;
+gpointer property_manager_ref (gpointer instance);
+void property_manager_unref (gpointer instance);
+GParamSpec* param_spec_property_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_property_manager (GValue* value, gpointer v_object);
+void value_take_property_manager (GValue* value, gpointer v_object);
+gpointer value_get_property_manager (const GValue* value);
+GType property_manager_get_type (void) G_GNUC_CONST;
+gpointer gkbd_layout_ref (gpointer instance);
+void gkbd_layout_unref (gpointer instance);
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_gkbd_layout (GValue* value, gpointer v_object);
+void value_take_gkbd_layout (GValue* value, gpointer v_object);
+gpointer value_get_gkbd_layout (const GValue* value);
+GType gkbd_layout_get_type (void) G_GNUC_CONST;
+gpointer xkb_layout_ref (gpointer instance);
+void xkb_layout_unref (gpointer instance);
+GParamSpec* param_spec_xkb_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_xkb_layout (GValue* value, gpointer v_object);
+void value_take_xkb_layout (GValue* value, gpointer v_object);
+gpointer value_get_xkb_layout (const GValue* value);
+GType xkb_layout_get_type (void) G_GNUC_CONST;
+#define PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_PANEL, PanelPrivate))
+enum {
+ PANEL_DUMMY_PROPERTY
+};
+GType keybinding_manager_get_type (void) G_GNUC_CONST;
+KeybindingManager* keybinding_manager_get_instance (void);
+void keybinding_manager_unbind (KeybindingManager* self, const gchar* accelerator);
+#define PANEL_ACCELERATOR_SWITCH_IME_FOREWARD "<Control>space"
+#define PANEL_ACCELERATOR_SWITCH_IME_BACKWARD "<Control><Shift>space"
+static void panel_gkbdlayout_changed_cb (Panel* self);
+static void _panel_gkbdlayout_changed_cb_gkbd_layout_changed (GkbdLayout* _sender, gpointer self);
+void gkbd_layout_stop_listen (GkbdLayout* self);
+Panel* panel_new (IBusBus* bus);
+Panel* panel_construct (GType object_type, IBusBus* bus);
+static void panel_status_icon_popup_menu_cb (Panel* self, GtkStatusIcon* status_icon, guint button, guint activate_time);
+static void _panel_status_icon_popup_menu_cb_gtk_status_icon_popup_menu (GtkStatusIcon* _sender, guint button, guint activate_time, gpointer self);
+static void panel_status_icon_activate_cb (Panel* self, GtkStatusIcon* status_icon);
+static void _panel_status_icon_activate_cb_gtk_status_icon_activate (GtkStatusIcon* _sender, gpointer self);
+CandidatePanel* candidate_panel_new (void);
+CandidatePanel* candidate_panel_construct (GType object_type);
+static void __lambda23_ (Panel* self, CandidatePanel* w);
+static void ___lambda23__candidate_panel_page_up (CandidatePanel* _sender, gpointer self);
+static void __lambda24_ (Panel* self, CandidatePanel* w);
+static void ___lambda24__candidate_panel_page_down (CandidatePanel* _sender, gpointer self);
+Switcher* switcher_new (void);
+Switcher* switcher_construct (GType object_type);
+PropertyManager* property_manager_new (void);
+PropertyManager* property_manager_construct (GType object_type);
+static void __lambda25_ (Panel* self, const gchar* k, gint s);
+static void ___lambda25__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self);
+static void panel_set_keybinding (Panel* self);
+static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add12 (gchar*** array, int* length, int* size, gchar* value);
+gboolean keybinding_manager_bind (KeybindingManager* self, const gchar* accelerator, KeybindingManagerKeybindingHandlerFunc handler, void* handler_target);
+static void ____lambda26_ (Panel* self, GdkEvent* e);
+static void panel_handle_engine_switch (Panel* self, GdkEvent* event, gboolean revert);
+static void _____lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
+static void _____lambda27_ (Panel* self, GdkEvent* e);
+static void ______lambda27__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
+void panel_set_config (Panel* self, IBusConfig* config);
+static void panel_config_value_changed_cb (Panel* self, IBusConfig* config, const gchar* section, const gchar* name, GVariant* variant);
+static void _panel_config_value_changed_cb_ibus_config_value_changed (IBusConfig* _sender, const gchar* section, const gchar* name, GVariant* value, gpointer self);
+static void panel_init_engines_order (Panel* self);
+static void panel_update_engines (Panel* self, GVariant* var_engines, GVariant* var_order);
+void gkbd_layout_lock_group (GkbdLayout* self, gint id);
+void xkb_layout_reset_layout (XKBLayout* self);
+static void panel_update_xkb_engines (Panel* self);
+static void panel_init_gkbd (Panel* self);
+GkbdLayout* gkbd_layout_new (void);
+GkbdLayout* gkbd_layout_construct (GType object_type);
+void gkbd_layout_start_listen (GkbdLayout* self);
+XKBLayout* xkb_layout_new (IBusConfig* config);
+XKBLayout* xkb_layout_construct (GType object_type, IBusConfig* config);
+gchar* xkb_layout_get_layout (XKBLayout* self);
+gchar* xkb_layout_get_variant (XKBLayout* self);
+static void _g_free0_ (gpointer var);
+static void _g_list_free__g_free0_ (GList* self);
+static void _vala_array_add13 (gchar*** array, int* length, int* size, gchar* value);
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle);
+static void _vala_array_add14 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add15 (gchar*** array, int* length, int* size, gchar* value);
+static void panel_set_xkb_group_layout (Panel* self, const gchar* layout);
+gint* xkb_layout_set_layout (XKBLayout* self, const gchar* _layout, const gchar* _variant, const gchar* _option, int* result_length1);
+static gboolean panel_set_gkbd_layout (Panel* self, const gchar* layout);
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1);
+static void panel_set_layout (Panel* self, const gchar* layout);
+static void panel_switch_engine (Panel* self, gint i, gboolean force);
+static void _vala_array_add16 (gchar*** array, int* length, int* size, gchar* value);
+guint keybinding_manager_get_primary_modifier (guint binding_mask);
+gboolean keybinding_manager_primary_modifier_still_pressed (GdkEvent* event, guint primary_modifier);
+gint switcher_run (Switcher* self, GdkEvent* event, IBusEngineDesc** engines, int engines_length1, gint index);
+static gchar** _vala_array_dup2 (gchar** self, int length);
+static void _vala_array_add17 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add18 (gchar*** array, int* length, int* size, gchar* value);
+static IBusEngineDesc** _vala_array_dup3 (IBusEngineDesc** self, int length);
+static IBusEngineDesc** _vala_array_dup4 (IBusEngineDesc** self, int length);
+static void panel_show_setup_dialog (Panel* self);
+static void __lambda18_ (Panel* self, GPid pid, gint state);
+static void ___lambda18__gchild_watch_func (GPid pid, gint status, gpointer self);
+static void panel_show_about_dialog (Panel* self);
+static void ___lambda17_ (Panel* self, GtkMenuItem* i);
+static void ____lambda17__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self);
+static void ___lambda19_ (Panel* self, GtkMenuItem* i);
+static void ____lambda19__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self);
+static void ___lambda20_ (Panel* self, GtkMenuItem* i);
+static void ____lambda20__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self);
+static void ___lambda21_ (Panel* self, GtkMenuItem* i);
+static void ____lambda21__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self);
+static void _gtk_status_icon_position_menu_gtk_menu_position_func (GtkMenu* menu, gint* x, gint* y, gboolean* push_in, gpointer self);
+gint property_manager_create_menu_items (PropertyManager* self, GtkMenu* menu);
+static Block4Data* block4_data_ref (Block4Data* _data4_);
+static void block4_data_unref (Block4Data* _data4_);
+IconWidget* icon_widget_new (const gchar* icon, gint size);
+IconWidget* icon_widget_construct (GType object_type, const gchar* icon, gint size);
+GType icon_widget_get_type (void) G_GNUC_CONST;
+static void ____lambda22_ (Block4Data* _data4_, GtkMenuItem* item);
+static void _____lambda22__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self);
+static void panel_real_set_cursor_location (IBusPanelService* base, gint x, gint y, gint width, gint height);
+void candidate_panel_set_cursor_location (CandidatePanel* self, gint x, gint y, gint width, gint height);
+static void panel_real_focus_in (IBusPanelService* base, const gchar* input_context_path);
+static void panel_real_focus_out (IBusPanelService* base, const gchar* input_context_path);
+static void panel_real_register_properties (IBusPanelService* base, IBusPropList* props);
+void property_manager_set_properties (PropertyManager* self, IBusPropList* props);
+static void panel_real_update_property (IBusPanelService* base, IBusProperty* prop);
+void property_manager_update_property (PropertyManager* self, IBusProperty* prop);
+static void panel_real_update_preedit_text (IBusPanelService* base, IBusText* text, guint cursor_pos, gboolean visible);
+void candidate_panel_set_preedit_text (CandidatePanel* self, IBusText* text, guint cursor);
+static void panel_real_hide_preedit_text (IBusPanelService* base);
+static void panel_real_update_auxiliary_text (IBusPanelService* base, IBusText* text, gboolean visible);
+void candidate_panel_set_auxiliary_text (CandidatePanel* self, IBusText* text);
+static void panel_real_hide_auxiliary_text (IBusPanelService* base);
+static void panel_real_update_lookup_table (IBusPanelService* base, IBusLookupTable* table, gboolean visible);
+void candidate_panel_set_lookup_table (CandidatePanel* self, IBusLookupTable* table);
+static void panel_real_hide_lookup_table (IBusPanelService* base);
+static void panel_real_state_changed (IBusPanelService* base);
+static void panel_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+
+
+static void _panel_gkbdlayout_changed_cb_gkbd_layout_changed (GkbdLayout* _sender, gpointer self) {
+ panel_gkbdlayout_changed_cb (self);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+static void _panel_status_icon_popup_menu_cb_gtk_status_icon_popup_menu (GtkStatusIcon* _sender, guint button, guint activate_time, gpointer self) {
+ panel_status_icon_popup_menu_cb (self, _sender, button, activate_time);
+}
+
+
+static void _panel_status_icon_activate_cb_gtk_status_icon_activate (GtkStatusIcon* _sender, gpointer self) {
+ panel_status_icon_activate_cb (self, _sender);
+}
+
+
+static void __lambda23_ (Panel* self, CandidatePanel* w) {
+ g_return_if_fail (w != NULL);
+ ibus_panel_service_page_up ((IBusPanelService*) self);
+}
+
+
+static void ___lambda23__candidate_panel_page_up (CandidatePanel* _sender, gpointer self) {
+ __lambda23_ (self, _sender);
+}
+
+
+static void __lambda24_ (Panel* self, CandidatePanel* w) {
+ g_return_if_fail (w != NULL);
+ ibus_panel_service_page_down ((IBusPanelService*) self);
+}
+
+
+static void ___lambda24__candidate_panel_page_down (CandidatePanel* _sender, gpointer self) {
+ __lambda24_ (self, _sender);
+}
+
+
+static void __lambda25_ (Panel* self, const gchar* k, gint s) {
+ const gchar* _tmp0_;
+ gint _tmp1_;
+ g_return_if_fail (k != NULL);
+ _tmp0_ = k;
+ _tmp1_ = s;
+ ibus_panel_service_property_activate ((IBusPanelService*) self, _tmp0_, (guint) _tmp1_);
+}
+
+
+static void ___lambda25__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self) {
+ __lambda25_ (self, key, state);
+}
+
+
+Panel* panel_construct (GType object_type, IBusBus* bus) {
+ Panel * self = NULL;
+ IBusBus* _tmp0_;
+ gboolean _tmp1_ = FALSE;
+ IBusBus* _tmp2_;
+ GDBusConnection* _tmp3_ = NULL;
+ IBusBus* _tmp4_;
+ IBusBus* _tmp5_;
+ GtkStatusIcon* _tmp6_;
+ GtkStatusIcon* _tmp7_;
+ GtkStatusIcon* _tmp8_;
+ GtkStatusIcon* _tmp9_;
+ GtkStatusIcon* _tmp10_;
+ GtkStatusIcon* _tmp11_;
+ CandidatePanel* _tmp12_;
+ CandidatePanel* _tmp13_;
+ CandidatePanel* _tmp14_;
+ CandidatePanel* _tmp15_;
+ Switcher* _tmp16_;
+ Switcher* _tmp17_;
+ PropertyManager* _tmp18_;
+ PropertyManager* _tmp19_;
+ g_return_val_if_fail (bus != NULL, NULL);
+ _tmp0_ = bus;
+ _tmp1_ = ibus_bus_is_connected (_tmp0_);
+ g_assert (_tmp1_);
+ _tmp2_ = bus;
+ _tmp3_ = ibus_bus_get_connection (_tmp2_);
+ self = (Panel*) g_object_new (object_type, "connection", _tmp3_, "object-path", "/org/freedesktop/IBus/Panel", NULL);
+ _tmp4_ = bus;
+ _tmp5_ = _g_object_ref0 (_tmp4_);
+ _g_object_unref0 (self->priv->m_bus);
+ self->priv->m_bus = _tmp5_;
+ _tmp6_ = gtk_status_icon_new ();
+ _g_object_unref0 (self->priv->m_status_icon);
+ self->priv->m_status_icon = _tmp6_;
+ _tmp7_ = self->priv->m_status_icon;
+ gtk_status_icon_set_name (_tmp7_, "ibus-ui-gtk");
+ _tmp8_ = self->priv->m_status_icon;
+ gtk_status_icon_set_title (_tmp8_, "IBus Panel");
+ _tmp9_ = self->priv->m_status_icon;
+ g_signal_connect_object (_tmp9_, "popup-menu", (GCallback) _panel_status_icon_popup_menu_cb_gtk_status_icon_popup_menu, self, 0);
+ _tmp10_ = self->priv->m_status_icon;
+ g_signal_connect_object (_tmp10_, "activate", (GCallback) _panel_status_icon_activate_cb_gtk_status_icon_activate, self, 0);
+ _tmp11_ = self->priv->m_status_icon;
+ gtk_status_icon_set_from_icon_name (_tmp11_, "ibus-keyboard");
+ _tmp12_ = candidate_panel_new ();
+ _tmp13_ = g_object_ref_sink (_tmp12_);
+ _g_object_unref0 (self->priv->m_candidate_panel);
+ self->priv->m_candidate_panel = _tmp13_;
+ _tmp14_ = self->priv->m_candidate_panel;
+ g_signal_connect_object (_tmp14_, "page-up", (GCallback) ___lambda23__candidate_panel_page_up, self, 0);
+ _tmp15_ = self->priv->m_candidate_panel;
+ g_signal_connect_object (_tmp15_, "page-down", (GCallback) ___lambda24__candidate_panel_page_down, self, 0);
+ _tmp16_ = switcher_new ();
+ _tmp17_ = g_object_ref_sink (_tmp16_);
+ _g_object_unref0 (self->priv->m_switcher);
+ self->priv->m_switcher = _tmp17_;
+ _tmp18_ = property_manager_new ();
+ _property_manager_unref0 (self->priv->m_property_manager);
+ self->priv->m_property_manager = _tmp18_;
+ _tmp19_ = self->priv->m_property_manager;
+ g_signal_connect_object (_tmp19_, "property-activate", (GCallback) ___lambda25__property_manager_property_activate, self, 0);
+ g_signal_emit_by_name ((IBusPanelService*) self, "state-changed");
+ return self;
+}
+
+
+Panel* panel_new (IBusBus* bus) {
+ return panel_construct (TYPE_PANEL, bus);
+}
+
+
+static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static gchar* string_slice (const gchar* self, glong start, glong end) {
+ gchar* result = NULL;
+ gint _tmp0_;
+ gint _tmp1_;
+ glong string_length;
+ glong _tmp2_;
+ glong _tmp5_;
+ gboolean _tmp8_ = FALSE;
+ glong _tmp9_;
+ gboolean _tmp12_;
+ gboolean _tmp13_ = FALSE;
+ glong _tmp14_;
+ gboolean _tmp17_;
+ glong _tmp18_;
+ glong _tmp19_;
+ glong _tmp20_;
+ glong _tmp21_;
+ glong _tmp22_;
+ gchar* _tmp23_ = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = strlen (self);
+ _tmp1_ = _tmp0_;
+ string_length = (glong) _tmp1_;
+ _tmp2_ = start;
+ if (_tmp2_ < ((glong) 0)) {
+ glong _tmp3_;
+ glong _tmp4_;
+ _tmp3_ = string_length;
+ _tmp4_ = start;
+ start = _tmp3_ + _tmp4_;
+ }
+ _tmp5_ = end;
+ if (_tmp5_ < ((glong) 0)) {
+ glong _tmp6_;
+ glong _tmp7_;
+ _tmp6_ = string_length;
+ _tmp7_ = end;
+ end = _tmp6_ + _tmp7_;
+ }
+ _tmp9_ = start;
+ if (_tmp9_ >= ((glong) 0)) {
+ glong _tmp10_;
+ glong _tmp11_;
+ _tmp10_ = start;
+ _tmp11_ = string_length;
+ _tmp8_ = _tmp10_ <= _tmp11_;
+ } else {
+ _tmp8_ = FALSE;
+ }
+ _tmp12_ = _tmp8_;
+ g_return_val_if_fail (_tmp12_, NULL);
+ _tmp14_ = end;
+ if (_tmp14_ >= ((glong) 0)) {
+ glong _tmp15_;
+ glong _tmp16_;
+ _tmp15_ = end;
+ _tmp16_ = string_length;
+ _tmp13_ = _tmp15_ <= _tmp16_;
+ } else {
+ _tmp13_ = FALSE;
+ }
+ _tmp17_ = _tmp13_;
+ g_return_val_if_fail (_tmp17_, NULL);
+ _tmp18_ = start;
+ _tmp19_ = end;
+ g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
+ _tmp20_ = start;
+ _tmp21_ = end;
+ _tmp22_ = start;
+ _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
+ result = _tmp23_;
+ return result;
+}
+
+
+static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add12 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void ____lambda26_ (Panel* self, GdkEvent* e) {
+ GdkEvent* _tmp0_;
+ g_return_if_fail (e != NULL);
+ _tmp0_ = e;
+ panel_handle_engine_switch (self, _tmp0_, FALSE);
+}
+
+
+static void _____lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
+ ____lambda26_ (self, event);
+}
+
+
+static void _____lambda27_ (Panel* self, GdkEvent* e) {
+ GdkEvent* _tmp0_;
+ g_return_if_fail (e != NULL);
+ _tmp0_ = e;
+ panel_handle_engine_switch (self, _tmp0_, TRUE);
+}
+
+
+static void ______lambda27__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
+ _____lambda27_ (self, event);
+}
+
+
+static void panel_set_keybinding (Panel* self) {
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_;
+ gchar* locale;
+ const gchar* _tmp2_;
+ gchar** _tmp4_;
+ gint _tmp4__length1;
+ gchar* _tmp5_;
+ IBusConfig* _tmp6_;
+ gboolean _tmp23_ = FALSE;
+ gchar** _tmp24_;
+ gint _tmp24__length1;
+ gboolean _tmp27_;
+ KeybindingManager* _tmp36_ = NULL;
+ KeybindingManager* keybinding_manager;
+ gchar** _tmp37_;
+ gint _tmp37__length1;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = setlocale (LC_ALL, NULL);
+ _tmp1_ = g_strdup (_tmp0_);
+ locale = _tmp1_;
+ _tmp2_ = locale;
+ if (_tmp2_ == NULL) {
+ gchar* _tmp3_;
+ _tmp3_ = g_strdup ("C");
+ _g_free0 (locale);
+ locale = _tmp3_;
+ }
+ _tmp4_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp4__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp5_ = g_strdup (PANEL_ACCELERATOR_SWITCH_IME_FOREWARD);
+ _vala_array_add9 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp5_);
+ _tmp6_ = self->priv->m_config;
+ if (_tmp6_ != NULL) {
+ IBusConfig* _tmp7_;
+ GVariant* _tmp8_ = NULL;
+ GVariant* variant;
+ GVariant* _tmp9_;
+ _tmp7_ = self->priv->m_config;
+ _tmp8_ = ibus_config_get_value (_tmp7_, "general/hotkey", "trigger_accel");
+ variant = _tmp8_;
+ _tmp9_ = variant;
+ if (_tmp9_ != NULL) {
+ gchar** _tmp10_ = NULL;
+ _tmp10_ = g_new0 (gchar*, 0 + 1);
+ self->priv->ACCELERATOR_IME_HOTKEYS = (_vala_array_free (self->priv->ACCELERATOR_IME_HOTKEYS, self->priv->ACCELERATOR_IME_HOTKEYS_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->ACCELERATOR_IME_HOTKEYS = _tmp10_;
+ self->priv->ACCELERATOR_IME_HOTKEYS_length1 = 0;
+ self->priv->_ACCELERATOR_IME_HOTKEYS_size_ = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp11_;
+ _tmp11_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp12_;
+ gint _tmp14_;
+ GVariant* _tmp15_;
+ gsize _tmp16_ = 0UL;
+ gchar** _tmp17_;
+ gint _tmp17__length1;
+ GVariant* _tmp18_;
+ gint _tmp19_;
+ GVariant* _tmp20_ = NULL;
+ GVariant* _tmp21_;
+ gchar* _tmp22_ = NULL;
+ _tmp12_ = _tmp11_;
+ if (!_tmp12_) {
+ gint _tmp13_;
+ _tmp13_ = i;
+ i = _tmp13_ + 1;
+ }
+ _tmp11_ = FALSE;
+ _tmp14_ = i;
+ _tmp15_ = variant;
+ _tmp16_ = g_variant_n_children (_tmp15_);
+ if (!(((gsize) _tmp14_) < _tmp16_)) {
+ break;
+ }
+ _tmp17_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp17__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp18_ = variant;
+ _tmp19_ = i;
+ _tmp20_ = g_variant_get_child_value (_tmp18_, (gsize) _tmp19_);
+ _tmp21_ = _tmp20_;
+ _tmp22_ = g_variant_dup_string (_tmp21_, NULL);
+ _vala_array_add10 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp22_);
+ _g_variant_unref0 (_tmp21_);
+ }
+ }
+ }
+ }
+ _g_variant_unref0 (variant);
+ }
+ _tmp24_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp24__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ if (_tmp24__length1 == 1) {
+ gchar** _tmp25_;
+ gint _tmp25__length1;
+ const gchar* _tmp26_;
+ _tmp25_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp25__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp26_ = _tmp25_[0];
+ _tmp23_ = g_strcmp0 (_tmp26_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0;
+ } else {
+ _tmp23_ = FALSE;
+ }
+ _tmp27_ = _tmp23_;
+ if (_tmp27_) {
+ const gchar* _tmp28_;
+ gchar* _tmp29_ = NULL;
+ gchar* _tmp30_;
+ gboolean _tmp31_;
+ _tmp28_ = locale;
+ _tmp29_ = string_slice (_tmp28_, (glong) 0, (glong) 2);
+ _tmp30_ = _tmp29_;
+ _tmp31_ = g_strcmp0 (_tmp30_, "ko") == 0;
+ _g_free0 (_tmp30_);
+ if (_tmp31_) {
+ gchar** _tmp32_;
+ gint _tmp32__length1;
+ gchar* _tmp33_;
+ gchar** _tmp34_;
+ gint _tmp34__length1;
+ gchar* _tmp35_;
+ _tmp32_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp32__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp33_ = g_strdup ("Hangul");
+ _vala_array_add11 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp33_);
+ _tmp34_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp34__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp35_ = g_strdup ("Alt_R");
+ _vala_array_add12 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp35_);
+ }
+ }
+ _tmp36_ = keybinding_manager_get_instance ();
+ keybinding_manager = _tmp36_;
+ _tmp37_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp37__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gchar** keybinding_collection = NULL;
+ gint keybinding_collection_length1 = 0;
+ gint _keybinding_collection_size_ = 0;
+ gint keybinding_it = 0;
+ keybinding_collection = _tmp37_;
+ keybinding_collection_length1 = _tmp37__length1;
+ for (keybinding_it = 0; keybinding_it < _tmp37__length1; keybinding_it = keybinding_it + 1) {
+ gchar* _tmp38_;
+ gchar* keybinding = NULL;
+ _tmp38_ = g_strdup (keybinding_collection[keybinding_it]);
+ keybinding = _tmp38_;
+ {
+ KeybindingManager* _tmp39_;
+ const gchar* _tmp40_;
+ const gchar* _tmp41_;
+ _tmp39_ = keybinding_manager;
+ _tmp40_ = keybinding;
+ keybinding_manager_bind (_tmp39_, _tmp40_, _____lambda26__keybinding_manager_keybinding_handler_func, self);
+ _tmp41_ = keybinding;
+ if (g_strcmp0 (_tmp41_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0) {
+ KeybindingManager* _tmp42_;
+ _tmp42_ = keybinding_manager;
+ keybinding_manager_bind (_tmp42_, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD, ______lambda27__keybinding_manager_keybinding_handler_func, self);
+ }
+ _g_free0 (keybinding);
+ }
+ }
+ }
+ _g_object_unref0 (keybinding_manager);
+ _g_free0 (locale);
+}
+
+
+static void _panel_config_value_changed_cb_ibus_config_value_changed (IBusConfig* _sender, const gchar* section, const gchar* name, GVariant* value, gpointer self) {
+ panel_config_value_changed_cb (self, _sender, section, name, value);
+}
+
+
+void panel_set_config (Panel* self, IBusConfig* config) {
+ IBusConfig* _tmp0_;
+ IBusConfig* _tmp3_;
+ IBusConfig* _tmp4_;
+ IBusConfig* _tmp5_;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (config != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ != NULL) {
+ IBusConfig* _tmp1_;
+ guint _tmp2_ = 0U;
+ _tmp1_ = self->priv->m_config;
+ g_signal_parse_name ("value-changed", ibus_config_get_type (), &_tmp2_, NULL, FALSE);
+ g_signal_handlers_disconnect_matched (_tmp1_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _panel_config_value_changed_cb_ibus_config_value_changed, self);
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_config = NULL;
+ }
+ _tmp3_ = config;
+ _tmp4_ = _g_object_ref0 (_tmp3_);
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_config = _tmp4_;
+ panel_set_keybinding (self);
+ _tmp5_ = self->priv->m_config;
+ if (_tmp5_ != NULL) {
+ IBusConfig* _tmp6_;
+ IBusConfig* _tmp7_;
+ GVariant* _tmp8_ = NULL;
+ GVariant* _tmp9_;
+ IBusConfig* _tmp10_;
+ GVariant* _tmp11_ = NULL;
+ GVariant* _tmp12_;
+ _tmp6_ = self->priv->m_config;
+ g_signal_connect_object (_tmp6_, "value-changed", (GCallback) _panel_config_value_changed_cb_ibus_config_value_changed, self, 0);
+ panel_init_engines_order (self);
+ _tmp7_ = self->priv->m_config;
+ _tmp8_ = ibus_config_get_value (_tmp7_, "general", "preload_engines");
+ _tmp9_ = _tmp8_;
+ _tmp10_ = self->priv->m_config;
+ _tmp11_ = ibus_config_get_value (_tmp10_, "general", "engines_order");
+ _tmp12_ = _tmp11_;
+ panel_update_engines (self, _tmp9_, _tmp12_);
+ _g_variant_unref0 (_tmp12_);
+ _g_variant_unref0 (_tmp9_);
+ } else {
+ panel_update_engines (self, NULL, NULL);
+ }
+}
+
+
+static void panel_gkbdlayout_changed_cb (Panel* self) {
+ GTimer* _tmp0_;
+ gdouble _tmp1_ = 0.0;
+ gdouble elapsed;
+ gboolean _tmp2_ = FALSE;
+ gdouble _tmp3_;
+ gboolean _tmp5_;
+ gint _tmp6_;
+ GTimer* _tmp10_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_changed_layout_timer;
+ _tmp1_ = g_timer_elapsed (_tmp0_, NULL);
+ elapsed = _tmp1_;
+ _tmp3_ = elapsed;
+ if (_tmp3_ < 1.0) {
+ gdouble _tmp4_;
+ _tmp4_ = elapsed;
+ _tmp2_ = _tmp4_ > 0.0;
+ } else {
+ _tmp2_ = FALSE;
+ }
+ _tmp5_ = _tmp2_;
+ if (_tmp5_) {
+ return;
+ }
+ _tmp6_ = self->priv->m_fallback_lock_id;
+ if (_tmp6_ != (-1)) {
+ GkbdLayout* _tmp7_;
+ gint _tmp8_;
+ _tmp7_ = self->priv->m_gkbdlayout;
+ _tmp8_ = self->priv->m_fallback_lock_id;
+ gkbd_layout_lock_group (_tmp7_, _tmp8_);
+ self->priv->m_fallback_lock_id = -1;
+ } else {
+ XKBLayout* _tmp9_;
+ _tmp9_ = self->priv->m_xkblayout;
+ xkb_layout_reset_layout (_tmp9_);
+ }
+ panel_update_xkb_engines (self);
+ _tmp10_ = self->priv->m_changed_layout_timer;
+ g_timer_reset (_tmp10_);
+}
+
+
+static void panel_init_gkbd (Panel* self) {
+ GkbdLayout* _tmp0_;
+ GkbdLayout* _tmp1_;
+ GTimer* _tmp2_;
+ GTimer* _tmp3_;
+ GkbdLayout* _tmp4_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = gkbd_layout_new ();
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ self->priv->m_gkbdlayout = _tmp0_;
+ _tmp1_ = self->priv->m_gkbdlayout;
+ g_signal_connect_object (_tmp1_, "changed", (GCallback) _panel_gkbdlayout_changed_cb_gkbd_layout_changed, self, 0);
+ _tmp2_ = g_timer_new ();
+ _g_timer_destroy0 (self->priv->m_changed_layout_timer);
+ self->priv->m_changed_layout_timer = _tmp2_;
+ _tmp3_ = self->priv->m_changed_layout_timer;
+ g_timer_start (_tmp3_);
+ _tmp4_ = self->priv->m_gkbdlayout;
+ gkbd_layout_start_listen (_tmp4_);
+}
+
+
+static void panel_init_engines_order (Panel* self) {
+ IBusConfig* _tmp0_;
+ IBusConfig* _tmp1_;
+ XKBLayout* _tmp2_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ return;
+ }
+ _tmp1_ = self->priv->m_config;
+ _tmp2_ = xkb_layout_new (_tmp1_);
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_xkblayout = _tmp2_;
+ if (HAVE_IBUS_GKBD) {
+ panel_init_gkbd (self);
+ }
+ panel_update_xkb_engines (self);
+}
+
+
+static void _g_free0_ (gpointer var) {
+ var = (g_free (var), NULL);
+}
+
+
+static void _g_list_free__g_free0_ (GList* self) {
+ g_list_foreach (self, (GFunc) _g_free0_, NULL);
+ g_list_free (self);
+}
+
+
+static void _vala_array_add13 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle) {
+ int i;
+ for (i = 0; i < stack_length; i++) {
+ if (g_strcmp0 (stack[i], needle) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
+static void _vala_array_add14 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add15 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void panel_update_xkb_engines (Panel* self) {
+ XKBLayout* _tmp0_;
+ gchar* _tmp1_ = NULL;
+ gchar* var_layout;
+ XKBLayout* _tmp2_;
+ gchar* _tmp3_ = NULL;
+ gchar* var_variant;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ gchar** _tmp6_;
+ gchar** _tmp7_ = NULL;
+ const gchar* _tmp8_;
+ gchar** _tmp9_;
+ gchar** _tmp10_ = NULL;
+ IBusXKBConfigRegistry* _tmp11_;
+ IBusXKBConfigRegistry* _tmp12_;
+ IBusXKBConfigRegistry* registry;
+ gchar** _tmp13_ = NULL;
+ gchar** var_xkb_engine_names;
+ gint var_xkb_engine_names_length1;
+ gint _var_xkb_engine_names_size_;
+ IBusConfig* _tmp65_;
+ GVariant* _tmp66_ = NULL;
+ GVariant* var_engines;
+ gchar** _tmp67_ = NULL;
+ gchar** engine_names;
+ gint engine_names_length1;
+ gint _engine_names_size_;
+ gboolean updated_engine_names;
+ GVariant* _tmp68_;
+ gchar** _tmp72_;
+ gint _tmp72__length1;
+ gboolean _tmp79_;
+ IBusConfig* _tmp84_;
+ GVariant* _tmp85_ = NULL;
+ GVariant* var_order;
+ gchar** _tmp86_ = NULL;
+ gchar** order_names;
+ gint order_names_length1;
+ gint _order_names_size_;
+ gboolean updated_order_names;
+ GVariant* _tmp87_;
+ gchar** _tmp91_;
+ gint _tmp91__length1;
+ gboolean _tmp98_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_xkblayout;
+ _tmp1_ = xkb_layout_get_layout (_tmp0_);
+ var_layout = _tmp1_;
+ _tmp2_ = self->priv->m_xkblayout;
+ _tmp3_ = xkb_layout_get_variant (_tmp2_);
+ var_variant = _tmp3_;
+ _tmp4_ = var_layout;
+ if (g_strcmp0 (_tmp4_, "") == 0) {
+ _g_free0 (var_variant);
+ _g_free0 (var_layout);
+ return;
+ }
+ _tmp5_ = var_layout;
+ _tmp7_ = _tmp6_ = g_strsplit (_tmp5_, ",", 0);
+ self->priv->m_layouts = (_vala_array_free (self->priv->m_layouts, self->priv->m_layouts_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_layouts = _tmp7_;
+ self->priv->m_layouts_length1 = _vala_array_length (_tmp6_);
+ self->priv->_m_layouts_size_ = self->priv->m_layouts_length1;
+ _tmp8_ = var_variant;
+ _tmp10_ = _tmp9_ = g_strsplit (_tmp8_, ",", 0);
+ self->priv->m_variants = (_vala_array_free (self->priv->m_variants, self->priv->m_variants_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_variants = _tmp10_;
+ self->priv->m_variants_length1 = _vala_array_length (_tmp9_);
+ self->priv->_m_variants_size_ = self->priv->m_variants_length1;
+ _tmp11_ = ibus_xkb_config_registry_new ();
+ _tmp12_ = g_object_ref_sink (_tmp11_);
+ registry = _tmp12_;
+ _tmp13_ = g_new0 (gchar*, 0 + 1);
+ var_xkb_engine_names = _tmp13_;
+ var_xkb_engine_names_length1 = 0;
+ _var_xkb_engine_names_size_ = var_xkb_engine_names_length1;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp14_;
+ _tmp14_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp15_;
+ gint _tmp17_;
+ gchar** _tmp18_;
+ gint _tmp18__length1;
+ gchar** _tmp19_;
+ gint _tmp19__length1;
+ gint _tmp20_;
+ const gchar* _tmp21_;
+ gchar* _tmp22_;
+ gchar* name;
+ gchar* lang;
+ gboolean _tmp23_ = FALSE;
+ gint _tmp24_;
+ gchar** _tmp25_;
+ gint _tmp25__length1;
+ gboolean _tmp29_;
+ const gchar* _tmp50_;
+ gchar** _tmp61_;
+ gint _tmp61__length1;
+ const gchar* _tmp62_;
+ const gchar* _tmp63_;
+ gchar* _tmp64_ = NULL;
+ _tmp15_ = _tmp14_;
+ if (!_tmp15_) {
+ gint _tmp16_;
+ _tmp16_ = i;
+ i = _tmp16_ + 1;
+ }
+ _tmp14_ = FALSE;
+ _tmp17_ = i;
+ _tmp18_ = self->priv->m_layouts;
+ _tmp18__length1 = self->priv->m_layouts_length1;
+ if (!(_tmp17_ < _tmp18__length1)) {
+ break;
+ }
+ _tmp19_ = self->priv->m_layouts;
+ _tmp19__length1 = self->priv->m_layouts_length1;
+ _tmp20_ = i;
+ _tmp21_ = _tmp19_[_tmp20_];
+ _tmp22_ = g_strdup (_tmp21_);
+ name = _tmp22_;
+ lang = NULL;
+ _tmp24_ = i;
+ _tmp25_ = self->priv->m_variants;
+ _tmp25__length1 = self->priv->m_variants_length1;
+ if (_tmp24_ < _tmp25__length1) {
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ gint _tmp27_;
+ const gchar* _tmp28_;
+ _tmp26_ = self->priv->m_variants;
+ _tmp26__length1 = self->priv->m_variants_length1;
+ _tmp27_ = i;
+ _tmp28_ = _tmp26_[_tmp27_];
+ _tmp23_ = g_strcmp0 (_tmp28_, "") != 0;
+ } else {
+ _tmp23_ = FALSE;
+ }
+ _tmp29_ = _tmp23_;
+ if (_tmp29_) {
+ const gchar* _tmp30_;
+ gchar** _tmp31_;
+ gint _tmp31__length1;
+ gint _tmp32_;
+ const gchar* _tmp33_;
+ gchar* _tmp34_ = NULL;
+ const gchar* _tmp35_;
+ gchar** _tmp36_;
+ gint _tmp36__length1;
+ gint _tmp37_;
+ const gchar* _tmp38_;
+ gchar* _tmp39_ = NULL;
+ gchar* layout;
+ IBusXKBConfigRegistry* _tmp40_;
+ const gchar* _tmp41_;
+ GList* _tmp42_ = NULL;
+ GList* langs;
+ GList* _tmp43_;
+ guint _tmp44_ = 0U;
+ _tmp30_ = name;
+ _tmp31_ = self->priv->m_variants;
+ _tmp31__length1 = self->priv->m_variants_length1;
+ _tmp32_ = i;
+ _tmp33_ = _tmp31_[_tmp32_];
+ _tmp34_ = g_strdup_printf ("%s:%s", _tmp30_, _tmp33_);
+ _g_free0 (name);
+ name = _tmp34_;
+ _tmp35_ = name;
+ _tmp36_ = self->priv->m_variants;
+ _tmp36__length1 = self->priv->m_variants_length1;
+ _tmp37_ = i;
+ _tmp38_ = _tmp36_[_tmp37_];
+ _tmp39_ = g_strdup_printf ("%s(%s)", _tmp35_, _tmp38_);
+ layout = _tmp39_;
+ _tmp40_ = registry;
+ _tmp41_ = layout;
+ _tmp42_ = ibus_xkb_config_registry_layout_lang_get_langs (_tmp40_, _tmp41_);
+ langs = _tmp42_;
+ _tmp43_ = langs;
+ _tmp44_ = g_list_length (_tmp43_);
+ if (_tmp44_ != ((guint) 0)) {
+ GList* _tmp45_;
+ gconstpointer _tmp46_;
+ gchar* _tmp47_;
+ _tmp45_ = langs;
+ _tmp46_ = _tmp45_->data;
+ _tmp47_ = g_strdup ((const gchar*) _tmp46_);
+ _g_free0 (lang);
+ lang = _tmp47_;
+ }
+ __g_list_free__g_free0_0 (langs);
+ _g_free0 (layout);
+ } else {
+ const gchar* _tmp48_;
+ gchar* _tmp49_ = NULL;
+ _tmp48_ = name;
+ _tmp49_ = g_strdup_printf ("%s:", _tmp48_);
+ _g_free0 (name);
+ name = _tmp49_;
+ }
+ _tmp50_ = lang;
+ if (_tmp50_ == NULL) {
+ IBusXKBConfigRegistry* _tmp51_;
+ gchar** _tmp52_;
+ gint _tmp52__length1;
+ gint _tmp53_;
+ const gchar* _tmp54_;
+ GList* _tmp55_ = NULL;
+ GList* langs;
+ GList* _tmp56_;
+ guint _tmp57_ = 0U;
+ _tmp51_ = registry;
+ _tmp52_ = self->priv->m_layouts;
+ _tmp52__length1 = self->priv->m_layouts_length1;
+ _tmp53_ = i;
+ _tmp54_ = _tmp52_[_tmp53_];
+ _tmp55_ = ibus_xkb_config_registry_layout_lang_get_langs (_tmp51_, _tmp54_);
+ langs = _tmp55_;
+ _tmp56_ = langs;
+ _tmp57_ = g_list_length (_tmp56_);
+ if (_tmp57_ != ((guint) 0)) {
+ GList* _tmp58_;
+ gconstpointer _tmp59_;
+ gchar* _tmp60_;
+ _tmp58_ = langs;
+ _tmp59_ = _tmp58_->data;
+ _tmp60_ = g_strdup ((const gchar*) _tmp59_);
+ _g_free0 (lang);
+ lang = _tmp60_;
+ }
+ __g_list_free__g_free0_0 (langs);
+ }
+ _tmp61_ = var_xkb_engine_names;
+ _tmp61__length1 = var_xkb_engine_names_length1;
+ _tmp62_ = name;
+ _tmp63_ = lang;
+ _tmp64_ = g_strdup_printf ("%s:%s:%s", "xkb", _tmp62_, _tmp63_);
+ _vala_array_add13 (&var_xkb_engine_names, &var_xkb_engine_names_length1, &_var_xkb_engine_names_size_, _tmp64_);
+ _g_free0 (lang);
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp65_ = self->priv->m_config;
+ _tmp66_ = ibus_config_get_value (_tmp65_, "general", "preload_engines");
+ var_engines = _tmp66_;
+ _tmp67_ = g_new0 (gchar*, 0 + 1);
+ engine_names = _tmp67_;
+ engine_names_length1 = 0;
+ _engine_names_size_ = engine_names_length1;
+ updated_engine_names = FALSE;
+ _tmp68_ = var_engines;
+ if (_tmp68_ != NULL) {
+ GVariant* _tmp69_;
+ size_t _tmp70_;
+ gchar** _tmp71_ = NULL;
+ _tmp69_ = var_engines;
+ _tmp71_ = g_variant_dup_strv (_tmp69_, &_tmp70_);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ engine_names = _tmp71_;
+ engine_names_length1 = _tmp70_;
+ _engine_names_size_ = engine_names_length1;
+ }
+ _tmp72_ = var_xkb_engine_names;
+ _tmp72__length1 = var_xkb_engine_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp72_;
+ name_collection_length1 = _tmp72__length1;
+ for (name_it = 0; name_it < _tmp72__length1; name_it = name_it + 1) {
+ gchar* _tmp73_;
+ gchar* name = NULL;
+ _tmp73_ = g_strdup (name_collection[name_it]);
+ name = _tmp73_;
+ {
+ const gchar* _tmp74_;
+ gchar** _tmp75_;
+ gint _tmp75__length1;
+ gchar** _tmp76_;
+ gint _tmp76__length1;
+ const gchar* _tmp77_;
+ gchar* _tmp78_;
+ _tmp74_ = name;
+ _tmp75_ = engine_names;
+ _tmp75__length1 = engine_names_length1;
+ if (_vala_string_array_contains (_tmp75_, _tmp75__length1, _tmp74_)) {
+ _g_free0 (name);
+ continue;
+ }
+ updated_engine_names = TRUE;
+ _tmp76_ = engine_names;
+ _tmp76__length1 = engine_names_length1;
+ _tmp77_ = name;
+ _tmp78_ = g_strdup (_tmp77_);
+ _vala_array_add14 (&engine_names, &engine_names_length1, &_engine_names_size_, _tmp78_);
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp79_ = updated_engine_names;
+ if (_tmp79_) {
+ IBusConfig* _tmp80_;
+ gchar** _tmp81_;
+ gint _tmp81__length1;
+ GVariant* _tmp82_;
+ GVariant* _tmp83_;
+ _tmp80_ = self->priv->m_config;
+ _tmp81_ = engine_names;
+ _tmp81__length1 = engine_names_length1;
+ _tmp82_ = g_variant_new_strv (_tmp81_, _tmp81__length1);
+ _tmp83_ = g_variant_ref_sink (_tmp82_);
+ ibus_config_set_value (_tmp80_, "general", "preload_engines", _tmp83_);
+ _g_variant_unref0 (_tmp83_);
+ }
+ _tmp84_ = self->priv->m_config;
+ _tmp85_ = ibus_config_get_value (_tmp84_, "general", "engines_order");
+ var_order = _tmp85_;
+ _tmp86_ = g_new0 (gchar*, 0 + 1);
+ order_names = _tmp86_;
+ order_names_length1 = 0;
+ _order_names_size_ = order_names_length1;
+ updated_order_names = FALSE;
+ _tmp87_ = var_order;
+ if (_tmp87_ != NULL) {
+ GVariant* _tmp88_;
+ size_t _tmp89_;
+ gchar** _tmp90_ = NULL;
+ _tmp88_ = var_order;
+ _tmp90_ = g_variant_dup_strv (_tmp88_, &_tmp89_);
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ order_names = _tmp90_;
+ order_names_length1 = _tmp89_;
+ _order_names_size_ = order_names_length1;
+ }
+ _tmp91_ = var_xkb_engine_names;
+ _tmp91__length1 = var_xkb_engine_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp91_;
+ name_collection_length1 = _tmp91__length1;
+ for (name_it = 0; name_it < _tmp91__length1; name_it = name_it + 1) {
+ gchar* _tmp92_;
+ gchar* name = NULL;
+ _tmp92_ = g_strdup (name_collection[name_it]);
+ name = _tmp92_;
+ {
+ const gchar* _tmp93_;
+ gchar** _tmp94_;
+ gint _tmp94__length1;
+ gchar** _tmp95_;
+ gint _tmp95__length1;
+ const gchar* _tmp96_;
+ gchar* _tmp97_;
+ _tmp93_ = name;
+ _tmp94_ = order_names;
+ _tmp94__length1 = order_names_length1;
+ if (_vala_string_array_contains (_tmp94_, _tmp94__length1, _tmp93_)) {
+ _g_free0 (name);
+ continue;
+ }
+ _tmp95_ = order_names;
+ _tmp95__length1 = order_names_length1;
+ _tmp96_ = name;
+ _tmp97_ = g_strdup (_tmp96_);
+ _vala_array_add15 (&order_names, &order_names_length1, &_order_names_size_, _tmp97_);
+ updated_order_names = TRUE;
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp98_ = updated_order_names;
+ if (_tmp98_) {
+ IBusConfig* _tmp99_;
+ gchar** _tmp100_;
+ gint _tmp100__length1;
+ GVariant* _tmp101_;
+ GVariant* _tmp102_;
+ _tmp99_ = self->priv->m_config;
+ _tmp100_ = order_names;
+ _tmp100__length1 = order_names_length1;
+ _tmp101_ = g_variant_new_strv (_tmp100_, _tmp100__length1);
+ _tmp102_ = g_variant_ref_sink (_tmp101_);
+ ibus_config_set_value (_tmp99_, "general", "engines_order", _tmp102_);
+ _g_variant_unref0 (_tmp102_);
+ }
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_variant_unref0 (var_order);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_variant_unref0 (var_engines);
+ var_xkb_engine_names = (_vala_array_free (var_xkb_engine_names, var_xkb_engine_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_object_unref0 (registry);
+ _g_free0 (var_variant);
+ _g_free0 (var_layout);
+}
+
+
+static void panel_set_xkb_group_layout (Panel* self, const gchar* layout) {
+ XKBLayout* _tmp0_;
+ const gchar* _tmp1_;
+ gint _tmp2_ = 0;
+ gint* _tmp3_ = NULL;
+ gint* retval;
+ gint retval_length1;
+ gint _retval_size_;
+ gint* _tmp4_;
+ gint _tmp4__length1;
+ gint _tmp5_;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (layout != NULL);
+ _tmp0_ = self->priv->m_xkblayout;
+ _tmp1_ = layout;
+ _tmp3_ = xkb_layout_set_layout (_tmp0_, _tmp1_, "default", "default", &_tmp2_);
+ retval = _tmp3_;
+ retval_length1 = _tmp2_;
+ _retval_size_ = retval_length1;
+ _tmp4_ = retval;
+ _tmp4__length1 = retval_length1;
+ _tmp5_ = _tmp4_[0];
+ if (_tmp5_ >= 0) {
+ gint* _tmp6_;
+ gint _tmp6__length1;
+ gint _tmp7_;
+ gboolean _tmp8_ = FALSE;
+ gint* _tmp9_;
+ gint _tmp9__length1;
+ gint _tmp10_;
+ gboolean _tmp11_;
+ _tmp6_ = retval;
+ _tmp6__length1 = retval_length1;
+ _tmp7_ = _tmp6_[0];
+ self->priv->m_fallback_lock_id = _tmp7_;
+ _tmp9_ = retval;
+ _tmp9__length1 = retval_length1;
+ _tmp10_ = _tmp9_[1];
+ if (_tmp10_ != 0) {
+ _tmp8_ = TRUE;
+ } else {
+ _tmp8_ = FALSE;
+ }
+ _tmp11_ = _tmp8_;
+ self->priv->m_changed_xkb_option = _tmp11_;
+ }
+ retval = (g_free (retval), NULL);
+}
+
+
+static gboolean panel_set_gkbd_layout (Panel* self, const gchar* layout) {
+ gboolean result = FALSE;
+ gboolean _tmp0_;
+ GkbdLayout* _tmp1_;
+ gint _tmp2_ = 0;
+ gchar** _tmp3_ = NULL;
+ gchar** _tmp4_;
+ gint _tmp4__length1;
+ gint _tmp5_;
+ gint gkbd_len;
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (layout != NULL, FALSE);
+ _tmp0_ = self->priv->m_changed_xkb_option;
+ if (_tmp0_ == TRUE) {
+ self->priv->m_changed_xkb_option = FALSE;
+ result = FALSE;
+ return result;
+ }
+ _tmp1_ = self->priv->m_gkbdlayout;
+ _tmp3_ = gkbd_layout_get_group_names (_tmp1_, &_tmp2_);
+ _tmp4_ = _tmp3_;
+ _tmp4__length1 = _tmp2_;
+ _tmp5_ = _tmp2_;
+ _tmp4_ = (_vala_array_free (_tmp4_, _tmp4__length1, (GDestroyNotify) g_free), NULL);
+ gkbd_len = _tmp5_;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp6_;
+ _tmp6_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp7_;
+ gboolean _tmp9_ = FALSE;
+ gint _tmp10_;
+ gchar** _tmp11_;
+ gint _tmp11__length1;
+ gboolean _tmp14_;
+ gchar** _tmp15_;
+ gint _tmp15__length1;
+ gint _tmp16_;
+ const gchar* _tmp17_;
+ gchar* _tmp18_;
+ gchar* sys_layout;
+ gboolean _tmp19_ = FALSE;
+ gint _tmp20_;
+ gchar** _tmp21_;
+ gint _tmp21__length1;
+ gboolean _tmp25_;
+ const gchar* _tmp31_;
+ const gchar* _tmp32_;
+ _tmp7_ = _tmp6_;
+ if (!_tmp7_) {
+ gint _tmp8_;
+ _tmp8_ = i;
+ i = _tmp8_ + 1;
+ }
+ _tmp6_ = FALSE;
+ _tmp10_ = i;
+ _tmp11_ = self->priv->m_layouts;
+ _tmp11__length1 = self->priv->m_layouts_length1;
+ if (_tmp10_ < _tmp11__length1) {
+ gint _tmp12_;
+ gint _tmp13_;
+ _tmp12_ = i;
+ _tmp13_ = gkbd_len;
+ _tmp9_ = _tmp12_ < _tmp13_;
+ } else {
+ _tmp9_ = FALSE;
+ }
+ _tmp14_ = _tmp9_;
+ if (!_tmp14_) {
+ break;
+ }
+ _tmp15_ = self->priv->m_layouts;
+ _tmp15__length1 = self->priv->m_layouts_length1;
+ _tmp16_ = i;
+ _tmp17_ = _tmp15_[_tmp16_];
+ _tmp18_ = g_strdup (_tmp17_);
+ sys_layout = _tmp18_;
+ _tmp20_ = i;
+ _tmp21_ = self->priv->m_variants;
+ _tmp21__length1 = self->priv->m_variants_length1;
+ if (_tmp20_ < _tmp21__length1) {
+ gchar** _tmp22_;
+ gint _tmp22__length1;
+ gint _tmp23_;
+ const gchar* _tmp24_;
+ _tmp22_ = self->priv->m_variants;
+ _tmp22__length1 = self->priv->m_variants_length1;
+ _tmp23_ = i;
+ _tmp24_ = _tmp22_[_tmp23_];
+ _tmp19_ = g_strcmp0 (_tmp24_, "") != 0;
+ } else {
+ _tmp19_ = FALSE;
+ }
+ _tmp25_ = _tmp19_;
+ if (_tmp25_) {
+ const gchar* _tmp26_;
+ gchar** _tmp27_;
+ gint _tmp27__length1;
+ gint _tmp28_;
+ const gchar* _tmp29_;
+ gchar* _tmp30_ = NULL;
+ _tmp26_ = sys_layout;
+ _tmp27_ = self->priv->m_variants;
+ _tmp27__length1 = self->priv->m_variants_length1;
+ _tmp28_ = i;
+ _tmp29_ = _tmp27_[_tmp28_];
+ _tmp30_ = g_strdup_printf ("%s(%s)", _tmp26_, _tmp29_);
+ _g_free0 (sys_layout);
+ sys_layout = _tmp30_;
+ }
+ _tmp31_ = sys_layout;
+ _tmp32_ = layout;
+ if (g_strcmp0 (_tmp31_, _tmp32_) == 0) {
+ GkbdLayout* _tmp33_;
+ gint _tmp34_;
+ _tmp33_ = self->priv->m_gkbdlayout;
+ _tmp34_ = i;
+ gkbd_layout_lock_group (_tmp33_, _tmp34_);
+ result = TRUE;
+ _g_free0 (sys_layout);
+ return result;
+ }
+ _g_free0 (sys_layout);
+ }
+ }
+ }
+ result = FALSE;
+ return result;
+}
+
+
+static void panel_set_layout (Panel* self, const gchar* layout) {
+ gboolean _tmp0_ = FALSE;
+ const gchar* _tmp1_;
+ gboolean _tmp3_;
+ XKBLayout* _tmp4_;
+ XKBLayout* _tmp8_;
+ const gchar* _tmp9_;
+ gint _tmp10_ = 0;
+ gint* _tmp11_ = NULL;
+ gint* _tmp12_;
+ gint _tmp12__length1;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (layout != NULL);
+ _tmp1_ = layout;
+ if (g_strcmp0 (_tmp1_, "default") == 0) {
+ _tmp0_ = TRUE;
+ } else {
+ const gchar* _tmp2_;
+ _tmp2_ = layout;
+ _tmp0_ = _tmp2_ == NULL;
+ }
+ _tmp3_ = _tmp0_;
+ if (_tmp3_) {
+ return;
+ }
+ _tmp4_ = self->priv->m_xkblayout;
+ if (_tmp4_ == NULL) {
+ panel_init_engines_order (self);
+ }
+ if (HAVE_IBUS_GKBD) {
+ const gchar* _tmp5_;
+ gboolean _tmp6_ = FALSE;
+ const gchar* _tmp7_;
+ _tmp5_ = layout;
+ _tmp6_ = panel_set_gkbd_layout (self, _tmp5_);
+ if (_tmp6_) {
+ return;
+ }
+ _tmp7_ = layout;
+ panel_set_xkb_group_layout (self, _tmp7_);
+ return;
+ }
+ _tmp8_ = self->priv->m_xkblayout;
+ _tmp9_ = layout;
+ _tmp11_ = xkb_layout_set_layout (_tmp8_, _tmp9_, "default", "default", &_tmp10_);
+ _tmp12_ = _tmp11_;
+ _tmp12__length1 = _tmp10_;
+ _tmp12_ = (g_free (_tmp12_), NULL);
+}
+
+
+static void _vala_array_add16 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void panel_switch_engine (Panel* self, gint i, gboolean force) {
+ gboolean _tmp0_ = FALSE;
+ gint _tmp1_;
+ gboolean _tmp4_;
+ gboolean _tmp5_ = FALSE;
+ gint _tmp6_;
+ gboolean _tmp8_;
+ IBusEngineDesc** _tmp9_;
+ gint _tmp9__length1;
+ gint _tmp10_;
+ IBusEngineDesc* _tmp11_;
+ IBusEngineDesc* _tmp12_;
+ IBusEngineDesc* engine;
+ IBusEngineDesc** _tmp25_;
+ gint _tmp25__length1;
+ IBusEngineDesc* _tmp26_;
+ IBusEngineDesc* _tmp27_;
+ IBusEngineDesc* _tmp28_;
+ IBusBus* _tmp29_;
+ IBusEngineDesc* _tmp30_;
+ const gchar* _tmp31_ = NULL;
+ gboolean _tmp32_ = FALSE;
+ IBusEngineDesc* _tmp35_;
+ const gchar* _tmp36_ = NULL;
+ gchar** _tmp37_ = NULL;
+ gchar** names;
+ gint names_length1;
+ gint _names_size_;
+ IBusEngineDesc** _tmp38_;
+ gint _tmp38__length1;
+ IBusConfig* _tmp44_;
+ g_return_if_fail (self != NULL);
+ _tmp1_ = i;
+ if (_tmp1_ >= 0) {
+ gint _tmp2_;
+ IBusEngineDesc** _tmp3_;
+ gint _tmp3__length1;
+ _tmp2_ = i;
+ _tmp3_ = self->priv->m_engines;
+ _tmp3__length1 = self->priv->m_engines_length1;
+ _tmp0_ = _tmp2_ < _tmp3__length1;
+ } else {
+ _tmp0_ = FALSE;
+ }
+ _tmp4_ = _tmp0_;
+ g_assert (_tmp4_);
+ _tmp6_ = i;
+ if (_tmp6_ == 0) {
+ gboolean _tmp7_;
+ _tmp7_ = force;
+ _tmp5_ = !_tmp7_;
+ } else {
+ _tmp5_ = FALSE;
+ }
+ _tmp8_ = _tmp5_;
+ if (_tmp8_) {
+ return;
+ }
+ _tmp9_ = self->priv->m_engines;
+ _tmp9__length1 = self->priv->m_engines_length1;
+ _tmp10_ = i;
+ _tmp11_ = _tmp9_[_tmp10_];
+ _tmp12_ = _g_object_ref0 (_tmp11_);
+ engine = _tmp12_;
+ {
+ gint _tmp13_;
+ gint j;
+ _tmp13_ = i;
+ j = _tmp13_;
+ {
+ gboolean _tmp14_;
+ _tmp14_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp15_;
+ gint _tmp17_;
+ IBusEngineDesc** _tmp18_;
+ gint _tmp18__length1;
+ gint _tmp19_;
+ IBusEngineDesc** _tmp20_;
+ gint _tmp20__length1;
+ gint _tmp21_;
+ IBusEngineDesc* _tmp22_;
+ IBusEngineDesc* _tmp23_;
+ IBusEngineDesc* _tmp24_;
+ _tmp15_ = _tmp14_;
+ if (!_tmp15_) {
+ gint _tmp16_;
+ _tmp16_ = j;
+ j = _tmp16_ - 1;
+ }
+ _tmp14_ = FALSE;
+ _tmp17_ = j;
+ if (!(_tmp17_ > 0)) {
+ break;
+ }
+ _tmp18_ = self->priv->m_engines;
+ _tmp18__length1 = self->priv->m_engines_length1;
+ _tmp19_ = j;
+ _tmp20_ = self->priv->m_engines;
+ _tmp20__length1 = self->priv->m_engines_length1;
+ _tmp21_ = j;
+ _tmp22_ = _tmp20_[_tmp21_ - 1];
+ _tmp23_ = _g_object_ref0 (_tmp22_);
+ _g_object_unref0 (_tmp18_[_tmp19_]);
+ _tmp18_[_tmp19_] = _tmp23_;
+ _tmp24_ = _tmp18_[_tmp19_];
+ }
+ }
+ }
+ _tmp25_ = self->priv->m_engines;
+ _tmp25__length1 = self->priv->m_engines_length1;
+ _tmp26_ = engine;
+ _tmp27_ = _g_object_ref0 (_tmp26_);
+ _g_object_unref0 (_tmp25_[0]);
+ _tmp25_[0] = _tmp27_;
+ _tmp28_ = _tmp25_[0];
+ _tmp29_ = self->priv->m_bus;
+ _tmp30_ = engine;
+ _tmp31_ = ibus_engine_desc_get_name (_tmp30_);
+ _tmp32_ = ibus_bus_set_global_engine (_tmp29_, _tmp31_);
+ if (!_tmp32_) {
+ IBusEngineDesc* _tmp33_;
+ const gchar* _tmp34_ = NULL;
+ _tmp33_ = engine;
+ _tmp34_ = ibus_engine_desc_get_name (_tmp33_);
+ g_warning ("panel.vala:367: Switch engine to %s failed.", _tmp34_);
+ _g_object_unref0 (engine);
+ return;
+ }
+ _tmp35_ = engine;
+ _tmp36_ = ibus_engine_desc_get_layout (_tmp35_);
+ panel_set_layout (self, _tmp36_);
+ _tmp37_ = g_new0 (gchar*, 0 + 1);
+ names = _tmp37_;
+ names_length1 = 0;
+ _names_size_ = names_length1;
+ _tmp38_ = self->priv->m_engines;
+ _tmp38__length1 = self->priv->m_engines_length1;
+ {
+ IBusEngineDesc** desc_collection = NULL;
+ gint desc_collection_length1 = 0;
+ gint _desc_collection_size_ = 0;
+ gint desc_it = 0;
+ desc_collection = _tmp38_;
+ desc_collection_length1 = _tmp38__length1;
+ for (desc_it = 0; desc_it < _tmp38__length1; desc_it = desc_it + 1) {
+ IBusEngineDesc* _tmp39_;
+ IBusEngineDesc* desc = NULL;
+ _tmp39_ = _g_object_ref0 (desc_collection[desc_it]);
+ desc = _tmp39_;
+ {
+ gchar** _tmp40_;
+ gint _tmp40__length1;
+ IBusEngineDesc* _tmp41_;
+ const gchar* _tmp42_ = NULL;
+ gchar* _tmp43_;
+ _tmp40_ = names;
+ _tmp40__length1 = names_length1;
+ _tmp41_ = desc;
+ _tmp42_ = ibus_engine_desc_get_name (_tmp41_);
+ _tmp43_ = g_strdup (_tmp42_);
+ _vala_array_add16 (&names, &names_length1, &_names_size_, _tmp43_);
+ _g_object_unref0 (desc);
+ }
+ }
+ }
+ _tmp44_ = self->priv->m_config;
+ if (_tmp44_ != NULL) {
+ IBusConfig* _tmp45_;
+ gchar** _tmp46_;
+ gint _tmp46__length1;
+ GVariant* _tmp47_;
+ GVariant* _tmp48_;
+ _tmp45_ = self->priv->m_config;
+ _tmp46_ = names;
+ _tmp46__length1 = names_length1;
+ _tmp47_ = g_variant_new_strv (_tmp46_, _tmp46__length1);
+ _tmp48_ = g_variant_ref_sink (_tmp47_);
+ ibus_config_set_value (_tmp45_, "general", "engines_order", _tmp48_);
+ _g_variant_unref0 (_tmp48_);
+ }
+ names = (_vala_array_free (names, names_length1, (GDestroyNotify) g_free), NULL);
+ _g_object_unref0 (engine);
+}
+
+
+static void panel_config_value_changed_cb (Panel* self, IBusConfig* config, const gchar* section, const gchar* name, GVariant* variant) {
+ gboolean _tmp0_ = FALSE;
+ const gchar* _tmp1_;
+ gboolean _tmp3_;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (config != NULL);
+ g_return_if_fail (section != NULL);
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (variant != NULL);
+ _tmp1_ = section;
+ if (g_strcmp0 (_tmp1_, "general") == 0) {
+ const gchar* _tmp2_;
+ _tmp2_ = name;
+ _tmp0_ = g_strcmp0 (_tmp2_, "preload_engines") == 0;
+ } else {
+ _tmp0_ = FALSE;
+ }
+ _tmp3_ = _tmp0_;
+ if (_tmp3_) {
+ GVariant* _tmp4_;
+ _tmp4_ = variant;
+ panel_update_engines (self, _tmp4_, NULL);
+ }
+}
+
+
+static void panel_handle_engine_switch (Panel* self, GdkEvent* event, gboolean revert) {
+ IBusEngineDesc** _tmp0_;
+ gint _tmp0__length1;
+ GdkEvent* _tmp1_;
+ GdkEventKey _tmp2_;
+ GdkModifierType _tmp3_;
+ guint _tmp4_ = 0U;
+ guint primary_modifiers;
+ GdkEvent* _tmp5_;
+ guint _tmp6_;
+ gboolean _tmp7_ = FALSE;
+ gboolean pressed;
+ gboolean _tmp8_;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (event != NULL);
+ _tmp0_ = self->priv->m_engines;
+ _tmp0__length1 = self->priv->m_engines_length1;
+ if (_tmp0__length1 <= 1) {
+ return;
+ }
+ _tmp1_ = event;
+ _tmp2_ = _tmp1_->key;
+ _tmp3_ = _tmp2_.state;
+ _tmp4_ = keybinding_manager_get_primary_modifier ((guint) _tmp3_);
+ primary_modifiers = _tmp4_;
+ _tmp5_ = event;
+ _tmp6_ = primary_modifiers;
+ _tmp7_ = keybinding_manager_primary_modifier_still_pressed (_tmp5_, _tmp6_);
+ pressed = _tmp7_;
+ _tmp8_ = pressed;
+ if (_tmp8_) {
+ gint _tmp9_ = 0;
+ gboolean _tmp10_;
+ gint _tmp12_;
+ gint i;
+ Switcher* _tmp13_;
+ GdkEvent* _tmp14_;
+ IBusEngineDesc** _tmp15_;
+ gint _tmp15__length1;
+ gint _tmp16_;
+ gint _tmp17_ = 0;
+ gint _tmp18_;
+ _tmp10_ = revert;
+ if (_tmp10_) {
+ IBusEngineDesc** _tmp11_;
+ gint _tmp11__length1;
+ _tmp11_ = self->priv->m_engines;
+ _tmp11__length1 = self->priv->m_engines_length1;
+ _tmp9_ = _tmp11__length1 - 1;
+ } else {
+ _tmp9_ = 1;
+ }
+ _tmp12_ = _tmp9_;
+ i = _tmp12_;
+ _tmp13_ = self->priv->m_switcher;
+ _tmp14_ = event;
+ _tmp15_ = self->priv->m_engines;
+ _tmp15__length1 = self->priv->m_engines_length1;
+ _tmp16_ = i;
+ _tmp17_ = switcher_run (_tmp13_, _tmp14_, _tmp15_, _tmp15__length1, _tmp16_);
+ i = _tmp17_;
+ _tmp18_ = i;
+ if (_tmp18_ < 0) {
+ g_debug ("panel.vala:406: switch cancelled");
+ } else {
+ gint _tmp19_;
+ IBusEngineDesc** _tmp20_;
+ gint _tmp20__length1;
+ gint _tmp21_;
+ _tmp19_ = i;
+ _tmp20_ = self->priv->m_engines;
+ _tmp20__length1 = self->priv->m_engines_length1;
+ g_assert (_tmp19_ < _tmp20__length1);
+ _tmp21_ = i;
+ panel_switch_engine (self, _tmp21_, FALSE);
+ }
+ } else {
+ gint _tmp22_ = 0;
+ gboolean _tmp23_;
+ gint _tmp25_;
+ gint i;
+ gint _tmp26_;
+ _tmp23_ = revert;
+ if (_tmp23_) {
+ IBusEngineDesc** _tmp24_;
+ gint _tmp24__length1;
+ _tmp24_ = self->priv->m_engines;
+ _tmp24__length1 = self->priv->m_engines_length1;
+ _tmp22_ = _tmp24__length1 - 1;
+ } else {
+ _tmp22_ = 1;
+ }
+ _tmp25_ = _tmp22_;
+ i = _tmp25_;
+ _tmp26_ = i;
+ panel_switch_engine (self, _tmp26_, FALSE);
+ }
+}
+
+
+static gchar** _vala_array_dup2 (gchar** self, int length) {
+ gchar** result;
+ int i;
+ result = g_new0 (gchar*, length + 1);
+ for (i = 0; i < length; i++) {
+ gchar* _tmp0_;
+ _tmp0_ = g_strdup (self[i]);
+ result[i] = _tmp0_;
+ }
+ return result;
+}
+
+
+static void _vala_array_add17 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add18 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static IBusEngineDesc** _vala_array_dup3 (IBusEngineDesc** self, int length) {
+ IBusEngineDesc** result;
+ int i;
+ result = g_new0 (IBusEngineDesc*, length + 1);
+ for (i = 0; i < length; i++) {
+ IBusEngineDesc* _tmp0_;
+ _tmp0_ = _g_object_ref0 (self[i]);
+ result[i] = _tmp0_;
+ }
+ return result;
+}
+
+
+static IBusEngineDesc** _vala_array_dup4 (IBusEngineDesc** self, int length) {
+ IBusEngineDesc** result;
+ int i;
+ result = g_new0 (IBusEngineDesc*, length + 1);
+ for (i = 0; i < length; i++) {
+ IBusEngineDesc* _tmp0_;
+ _tmp0_ = _g_object_ref0 (self[i]);
+ result[i] = _tmp0_;
+ }
+ return result;
+}
+
+
+static void panel_update_engines (Panel* self, GVariant* var_engines, GVariant* var_order) {
+ gchar** engine_names;
+ gint engine_names_length1;
+ gint _engine_names_size_;
+ GVariant* _tmp0_;
+ gboolean _tmp4_ = FALSE;
+ gchar** _tmp5_;
+ gint _tmp5__length1;
+ gboolean _tmp7_;
+ gchar** _tmp10_ = NULL;
+ gint _tmp10__length1 = 0;
+ gint __tmp10__size_ = 0;
+ GVariant* _tmp11_;
+ gchar** _tmp15_;
+ gint _tmp15__length1;
+ gchar** _tmp16_;
+ gint _tmp16__length1;
+ gchar** order_names;
+ gint order_names_length1;
+ gint _order_names_size_;
+ gchar** _tmp17_ = NULL;
+ gchar** names;
+ gint names_length1;
+ gint _names_size_;
+ gchar** _tmp18_;
+ gint _tmp18__length1;
+ gchar** _tmp25_;
+ gint _tmp25__length1;
+ IBusBus* _tmp32_;
+ gchar** _tmp33_;
+ gint _tmp33__length1;
+ IBusEngineDesc** _tmp34_;
+ IBusEngineDesc** _tmp35_ = NULL;
+ IBusEngineDesc** engines;
+ gint engines_length1;
+ gint _engines_size_;
+ IBusEngineDesc** _tmp36_;
+ gint _tmp36__length1;
+ g_return_if_fail (self != NULL);
+ engine_names = NULL;
+ engine_names_length1 = 0;
+ _engine_names_size_ = engine_names_length1;
+ _tmp0_ = var_engines;
+ if (_tmp0_ != NULL) {
+ GVariant* _tmp1_;
+ size_t _tmp2_;
+ gchar** _tmp3_ = NULL;
+ _tmp1_ = var_engines;
+ _tmp3_ = g_variant_dup_strv (_tmp1_, &_tmp2_);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ engine_names = _tmp3_;
+ engine_names_length1 = _tmp2_;
+ _engine_names_size_ = engine_names_length1;
+ }
+ _tmp5_ = engine_names;
+ _tmp5__length1 = engine_names_length1;
+ if (_tmp5_ == NULL) {
+ _tmp4_ = TRUE;
+ } else {
+ gchar** _tmp6_;
+ gint _tmp6__length1;
+ _tmp6_ = engine_names;
+ _tmp6__length1 = engine_names_length1;
+ _tmp4_ = _tmp6__length1 == 0;
+ }
+ _tmp7_ = _tmp4_;
+ if (_tmp7_) {
+ gchar* _tmp8_;
+ gchar** _tmp9_ = NULL;
+ _tmp8_ = g_strdup ("xkb:us::eng");
+ _tmp9_ = g_new0 (gchar*, 1 + 1);
+ _tmp9_[0] = _tmp8_;
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ engine_names = _tmp9_;
+ engine_names_length1 = 1;
+ _engine_names_size_ = engine_names_length1;
+ }
+ _tmp11_ = var_order;
+ if (_tmp11_ != NULL) {
+ GVariant* _tmp12_;
+ size_t _tmp13_;
+ gchar** _tmp14_ = NULL;
+ _tmp12_ = var_order;
+ _tmp14_ = g_variant_dup_strv (_tmp12_, &_tmp13_);
+ _tmp10_ = (_vala_array_free (_tmp10_, _tmp10__length1, (GDestroyNotify) g_free), NULL);
+ _tmp10_ = _tmp14_;
+ _tmp10__length1 = _tmp13_;
+ __tmp10__size_ = _tmp10__length1;
+ } else {
+ _tmp10_ = (_vala_array_free (_tmp10_, _tmp10__length1, (GDestroyNotify) g_free), NULL);
+ _tmp10_ = NULL;
+ _tmp10__length1 = 0;
+ __tmp10__size_ = _tmp10__length1;
+ }
+ _tmp15_ = _tmp10_;
+ _tmp15__length1 = _tmp10__length1;
+ _tmp16_ = (_tmp15_ != NULL) ? _vala_array_dup2 (_tmp15_, _tmp15__length1) : ((gpointer) _tmp15_);
+ _tmp16__length1 = _tmp15__length1;
+ order_names = _tmp16_;
+ order_names_length1 = _tmp16__length1;
+ _order_names_size_ = order_names_length1;
+ _tmp17_ = g_new0 (gchar*, 0 + 1);
+ names = _tmp17_;
+ names_length1 = 0;
+ _names_size_ = names_length1;
+ _tmp18_ = order_names;
+ _tmp18__length1 = order_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp18_;
+ name_collection_length1 = _tmp18__length1;
+ for (name_it = 0; name_it < _tmp18__length1; name_it = name_it + 1) {
+ gchar* _tmp19_;
+ gchar* name = NULL;
+ _tmp19_ = g_strdup (name_collection[name_it]);
+ name = _tmp19_;
+ {
+ const gchar* _tmp20_;
+ gchar** _tmp21_;
+ gint _tmp21__length1;
+ _tmp20_ = name;
+ _tmp21_ = engine_names;
+ _tmp21__length1 = engine_names_length1;
+ if (_vala_string_array_contains (_tmp21_, _tmp21__length1, _tmp20_)) {
+ gchar** _tmp22_;
+ gint _tmp22__length1;
+ const gchar* _tmp23_;
+ gchar* _tmp24_;
+ _tmp22_ = names;
+ _tmp22__length1 = names_length1;
+ _tmp23_ = name;
+ _tmp24_ = g_strdup (_tmp23_);
+ _vala_array_add17 (&names, &names_length1, &_names_size_, _tmp24_);
+ }
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp25_ = engine_names;
+ _tmp25__length1 = engine_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp25_;
+ name_collection_length1 = _tmp25__length1;
+ for (name_it = 0; name_it < _tmp25__length1; name_it = name_it + 1) {
+ gchar* _tmp26_;
+ gchar* name = NULL;
+ _tmp26_ = g_strdup (name_collection[name_it]);
+ name = _tmp26_;
+ {
+ const gchar* _tmp27_;
+ gchar** _tmp28_;
+ gint _tmp28__length1;
+ gchar** _tmp29_;
+ gint _tmp29__length1;
+ const gchar* _tmp30_;
+ gchar* _tmp31_;
+ _tmp27_ = name;
+ _tmp28_ = names;
+ _tmp28__length1 = names_length1;
+ if (_vala_string_array_contains (_tmp28_, _tmp28__length1, _tmp27_)) {
+ _g_free0 (name);
+ continue;
+ }
+ _tmp29_ = names;
+ _tmp29__length1 = names_length1;
+ _tmp30_ = name;
+ _tmp31_ = g_strdup (_tmp30_);
+ _vala_array_add18 (&names, &names_length1, &_names_size_, _tmp31_);
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp32_ = self->priv->m_bus;
+ _tmp33_ = names;
+ _tmp33__length1 = names_length1;
+ _tmp35_ = _tmp34_ = ibus_bus_get_engines_by_names (_tmp32_, _tmp33_);
+ engines = _tmp35_;
+ engines_length1 = _vala_array_length (_tmp34_);
+ _engines_size_ = engines_length1;
+ _tmp36_ = self->priv->m_engines;
+ _tmp36__length1 = self->priv->m_engines_length1;
+ if (_tmp36__length1 == 0) {
+ IBusEngineDesc** _tmp37_;
+ gint _tmp37__length1;
+ IBusEngineDesc** _tmp38_;
+ gint _tmp38__length1;
+ _tmp37_ = engines;
+ _tmp37__length1 = engines_length1;
+ _tmp38_ = (_tmp37_ != NULL) ? _vala_array_dup3 (_tmp37_, _tmp37__length1) : ((gpointer) _tmp37_);
+ _tmp38__length1 = _tmp37__length1;
+ self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
+ self->priv->m_engines = _tmp38_;
+ self->priv->m_engines_length1 = _tmp38__length1;
+ self->priv->_m_engines_size_ = self->priv->m_engines_length1;
+ panel_switch_engine (self, 0, TRUE);
+ } else {
+ IBusEngineDesc** _tmp39_;
+ gint _tmp39__length1;
+ IBusEngineDesc* _tmp40_;
+ IBusEngineDesc* _tmp41_;
+ IBusEngineDesc* current_engine;
+ IBusEngineDesc** _tmp42_;
+ gint _tmp42__length1;
+ IBusEngineDesc** _tmp43_;
+ gint _tmp43__length1;
+ gint i = 0;
+ _tmp39_ = self->priv->m_engines;
+ _tmp39__length1 = self->priv->m_engines_length1;
+ _tmp40_ = _tmp39_[0];
+ _tmp41_ = _g_object_ref0 (_tmp40_);
+ current_engine = _tmp41_;
+ _tmp42_ = engines;
+ _tmp42__length1 = engines_length1;
+ _tmp43_ = (_tmp42_ != NULL) ? _vala_array_dup4 (_tmp42_, _tmp42__length1) : ((gpointer) _tmp42_);
+ _tmp43__length1 = _tmp42__length1;
+ self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
+ self->priv->m_engines = _tmp43_;
+ self->priv->m_engines_length1 = _tmp43__length1;
+ self->priv->_m_engines_size_ = self->priv->m_engines_length1;
+ {
+ gboolean _tmp44_;
+ i = 0;
+ _tmp44_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp45_;
+ gint _tmp47_;
+ IBusEngineDesc** _tmp48_;
+ gint _tmp48__length1;
+ IBusEngineDesc* _tmp49_;
+ const gchar* _tmp50_ = NULL;
+ IBusEngineDesc** _tmp51_;
+ gint _tmp51__length1;
+ gint _tmp52_;
+ IBusEngineDesc* _tmp53_;
+ const gchar* _tmp54_ = NULL;
+ _tmp45_ = _tmp44_;
+ if (!_tmp45_) {
+ gint _tmp46_;
+ _tmp46_ = i;
+ i = _tmp46_ + 1;
+ }
+ _tmp44_ = FALSE;
+ _tmp47_ = i;
+ _tmp48_ = self->priv->m_engines;
+ _tmp48__length1 = self->priv->m_engines_length1;
+ if (!(_tmp47_ < _tmp48__length1)) {
+ break;
+ }
+ _tmp49_ = current_engine;
+ _tmp50_ = ibus_engine_desc_get_name (_tmp49_);
+ _tmp51_ = engines;
+ _tmp51__length1 = engines_length1;
+ _tmp52_ = i;
+ _tmp53_ = _tmp51_[_tmp52_];
+ _tmp54_ = ibus_engine_desc_get_name (_tmp53_);
+ if (g_strcmp0 (_tmp50_, _tmp54_) == 0) {
+ gint _tmp55_;
+ _tmp55_ = i;
+ panel_switch_engine (self, _tmp55_, FALSE);
+ _g_object_unref0 (current_engine);
+ engines = (_vala_array_free (engines, engines_length1, (GDestroyNotify) g_object_unref), NULL);
+ names = (_vala_array_free (names, names_length1, (GDestroyNotify) g_free), NULL);
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ _tmp10_ = (_vala_array_free (_tmp10_, _tmp10__length1, (GDestroyNotify) g_free), NULL);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ return;
+ }
+ }
+ }
+ panel_switch_engine (self, 0, TRUE);
+ _g_object_unref0 (current_engine);
+ }
+ engines = (_vala_array_free (engines, engines_length1, (GDestroyNotify) g_object_unref), NULL);
+ names = (_vala_array_free (names, names_length1, (GDestroyNotify) g_free), NULL);
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ _tmp10_ = (_vala_array_free (_tmp10_, _tmp10__length1, (GDestroyNotify) g_free), NULL);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+static void __lambda18_ (Panel* self, GPid pid, gint state) {
+ GPid _tmp0_;
+ GPid _tmp1_;
+ GPid _tmp2_;
+ _tmp0_ = pid;
+ _tmp1_ = self->priv->m_setup_pid;
+ if (_tmp0_ != _tmp1_) {
+ return;
+ }
+ self->priv->m_setup_pid = (GPid) 0;
+ _tmp2_ = pid;
+ g_spawn_close_pid (_tmp2_);
+}
+
+
+static void ___lambda18__gchild_watch_func (GPid pid, gint status, gpointer self) {
+ __lambda18_ (self, pid, status);
+}
+
+
+static void panel_show_setup_dialog (Panel* self) {
+ GPid _tmp0_;
+ gchar* _tmp3_ = NULL;
+ gchar* binary;
+ GPid _tmp13_;
+ GError * _inner_error_ = NULL;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_setup_pid;
+ if (_tmp0_ != ((GPid) 0)) {
+ GPid _tmp1_;
+ gint _tmp2_ = 0;
+ _tmp1_ = self->priv->m_setup_pid;
+ _tmp2_ = kill ((pid_t) _tmp1_, SIGUSR1);
+ if (_tmp2_ == 0) {
+ return;
+ }
+ self->priv->m_setup_pid = (GPid) 0;
+ }
+ _tmp3_ = g_build_filename (BINDIR, "ibus-setup", NULL);
+ binary = _tmp3_;
+ {
+ const gchar* _tmp4_;
+ gchar* _tmp5_;
+ gchar* _tmp6_;
+ gchar** _tmp7_ = NULL;
+ gchar** _tmp8_;
+ gint _tmp8__length1;
+ GPid _tmp9_ = 0;
+ _tmp4_ = binary;
+ _tmp5_ = g_strdup (_tmp4_);
+ _tmp6_ = g_strdup ("ibus-setup");
+ _tmp7_ = g_new0 (gchar*, 2 + 1);
+ _tmp7_[0] = _tmp5_;
+ _tmp7_[1] = _tmp6_;
+ _tmp8_ = _tmp7_;
+ _tmp8__length1 = 2;
+ g_spawn_async (NULL, _tmp8_, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &_tmp9_, &_inner_error_);
+ self->priv->m_setup_pid = _tmp9_;
+ _tmp8_ = (_vala_array_free (_tmp8_, _tmp8__length1, (GDestroyNotify) g_free), NULL);
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_SPAWN_ERROR) {
+ goto __catch2_g_spawn_error;
+ }
+ _g_free0 (binary);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ }
+ goto __finally2;
+ __catch2_g_spawn_error:
+ {
+ GError* e = NULL;
+ const gchar* _tmp10_;
+ GError* _tmp11_;
+ const gchar* _tmp12_;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ _tmp10_ = binary;
+ _tmp11_ = e;
+ _tmp12_ = _tmp11_->message;
+ g_warning ("panel.vala:478: Execute %s failed! %s", _tmp10_, _tmp12_);
+ self->priv->m_setup_pid = (GPid) 0;
+ _g_error_free0 (e);
+ }
+ __finally2:
+ if (_inner_error_ != NULL) {
+ _g_free0 (binary);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ _tmp13_ = self->priv->m_setup_pid;
+ g_child_watch_add_full (G_PRIORITY_DEFAULT_IDLE, _tmp13_, ___lambda18__gchild_watch_func, g_object_ref (self), g_object_unref);
+ _g_free0 (binary);
+}
+
+
+static void panel_show_about_dialog (Panel* self) {
+ GtkAboutDialog* _tmp0_;
+ GtkAboutDialog* _tmp25_;
+ gboolean _tmp26_ = FALSE;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_about_dialog;
+ if (_tmp0_ == NULL) {
+ GtkAboutDialog* _tmp1_;
+ GtkAboutDialog* _tmp2_;
+ GtkAboutDialog* _tmp3_;
+ GtkAboutDialog* _tmp4_;
+ const gchar* _tmp5_ = NULL;
+ gchar* _tmp6_;
+ gchar* copyright;
+ GtkAboutDialog* _tmp7_;
+ const gchar* _tmp8_;
+ GtkAboutDialog* _tmp9_;
+ GtkAboutDialog* _tmp10_;
+ const gchar* _tmp11_ = NULL;
+ GtkAboutDialog* _tmp12_;
+ GtkAboutDialog* _tmp13_;
+ gchar* _tmp14_;
+ gchar** _tmp15_ = NULL;
+ gchar** _tmp16_;
+ gint _tmp16__length1;
+ GtkAboutDialog* _tmp17_;
+ gchar* _tmp18_;
+ gchar** _tmp19_ = NULL;
+ gchar** _tmp20_;
+ gint _tmp20__length1;
+ GtkAboutDialog* _tmp21_;
+ const gchar* _tmp22_ = NULL;
+ GtkAboutDialog* _tmp23_;
+ GtkAboutDialog* _tmp24_;
+ _tmp1_ = (GtkAboutDialog*) gtk_about_dialog_new ();
+ _tmp2_ = g_object_ref_sink (_tmp1_);
+ _g_object_unref0 (self->priv->m_about_dialog);
+ self->priv->m_about_dialog = _tmp2_;
+ _tmp3_ = self->priv->m_about_dialog;
+ gtk_about_dialog_set_program_name (_tmp3_, "IBus");
+ _tmp4_ = self->priv->m_about_dialog;
+ gtk_about_dialog_set_version (_tmp4_, IBUS_VERSION);
+ _tmp5_ = _ ("Copyright (c) 2007-2012 Peng Huang\n" "Copyright (c) 2007-2010 Red Hat, Inc.\n");
+ _tmp6_ = g_strdup (_tmp5_);
+ copyright = _tmp6_;
+ _tmp7_ = self->priv->m_about_dialog;
+ _tmp8_ = copyright;
+ gtk_about_dialog_set_copyright (_tmp7_, _tmp8_);
+ _tmp9_ = self->priv->m_about_dialog;
+ gtk_about_dialog_set_license (_tmp9_, "LGPL");
+ _tmp10_ = self->priv->m_about_dialog;
+ _tmp11_ = _ ("IBus is an intelligent input bus for Linux/Unix.");
+ gtk_about_dialog_set_comments (_tmp10_, _tmp11_);
+ _tmp12_ = self->priv->m_about_dialog;
+ gtk_about_dialog_set_website (_tmp12_, "http://code.google.com/p/ibus");
+ _tmp13_ = self->priv->m_about_dialog;
+ _tmp14_ = g_strdup ("Peng Huang <shawn.p.huang@gmail.com>");
+ _tmp15_ = g_new0 (gchar*, 1 + 1);
+ _tmp15_[0] = _tmp14_;
+ _tmp16_ = _tmp15_;
+ _tmp16__length1 = 1;
+ gtk_about_dialog_set_authors (_tmp13_, _tmp16_);
+ _tmp16_ = (_vala_array_free (_tmp16_, _tmp16__length1, (GDestroyNotify) g_free), NULL);
+ _tmp17_ = self->priv->m_about_dialog;
+ _tmp18_ = g_strdup ("Peng Huang <shawn.p.huang@gmail.com>");
+ _tmp19_ = g_new0 (gchar*, 1 + 1);
+ _tmp19_[0] = _tmp18_;
+ _tmp20_ = _tmp19_;
+ _tmp20__length1 = 1;
+ gtk_about_dialog_set_documenters (_tmp17_, _tmp20_);
+ _tmp20_ = (_vala_array_free (_tmp20_, _tmp20__length1, (GDestroyNotify) g_free), NULL);
+ _tmp21_ = self->priv->m_about_dialog;
+ _tmp22_ = _ ("translator-credits");
+ gtk_about_dialog_set_translator_credits (_tmp21_, _tmp22_);
+ _tmp23_ = self->priv->m_about_dialog;
+ gtk_about_dialog_set_logo_icon_name (_tmp23_, "ibus");
+ _tmp24_ = self->priv->m_about_dialog;
+ gtk_window_set_icon_name ((GtkWindow*) _tmp24_, "ibus");
+ _g_free0 (copyright);
+ }
+ _tmp25_ = self->priv->m_about_dialog;
+ _tmp26_ = gtk_widget_get_visible ((GtkWidget*) _tmp25_);
+ if (!_tmp26_) {
+ GtkAboutDialog* _tmp27_;
+ GtkAboutDialog* _tmp28_;
+ _tmp27_ = self->priv->m_about_dialog;
+ gtk_dialog_run ((GtkDialog*) _tmp27_);
+ _tmp28_ = self->priv->m_about_dialog;
+ gtk_widget_hide ((GtkWidget*) _tmp28_);
+ } else {
+ GtkAboutDialog* _tmp29_;
+ _tmp29_ = self->priv->m_about_dialog;
+ gtk_window_present ((GtkWindow*) _tmp29_);
+ }
+}
+
+
+static void ___lambda17_ (Panel* self, GtkMenuItem* i) {
+ g_return_if_fail (i != NULL);
+ panel_show_setup_dialog (self);
+}
+
+
+static void ____lambda17__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self) {
+ ___lambda17_ (self, _sender);
+}
+
+
+static void ___lambda19_ (Panel* self, GtkMenuItem* i) {
+ g_return_if_fail (i != NULL);
+ panel_show_about_dialog (self);
+}
+
+
+static void ____lambda19__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self) {
+ ___lambda19_ (self, _sender);
+}
+
+
+static void ___lambda20_ (Panel* self, GtkMenuItem* i) {
+ IBusBus* _tmp0_;
+ g_return_if_fail (i != NULL);
+ _tmp0_ = self->priv->m_bus;
+ ibus_bus_exit (_tmp0_, TRUE);
+}
+
+
+static void ____lambda20__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self) {
+ ___lambda20_ (self, _sender);
+}
+
+
+static void ___lambda21_ (Panel* self, GtkMenuItem* i) {
+ IBusBus* _tmp0_;
+ g_return_if_fail (i != NULL);
+ _tmp0_ = self->priv->m_bus;
+ ibus_bus_exit (_tmp0_, FALSE);
+}
+
+
+static void ____lambda21__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self) {
+ ___lambda21_ (self, _sender);
+}
+
+
+static void _gtk_status_icon_position_menu_gtk_menu_position_func (GtkMenu* menu, gint* x, gint* y, gboolean* push_in, gpointer self) {
+ gtk_status_icon_position_menu (menu, x, y, push_in, self);
+}
+
+
+static void panel_status_icon_popup_menu_cb (Panel* self, GtkStatusIcon* status_icon, guint button, guint activate_time) {
+ GtkMenu* _tmp0_;
+ GtkMenu* _tmp29_;
+ GtkStatusIcon* _tmp30_;
+ guint32 _tmp31_ = 0U;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (status_icon != NULL);
+ _tmp0_ = self->priv->m_sys_menu;
+ if (_tmp0_ == NULL) {
+ GtkImageMenuItem* item = NULL;
+ GtkMenu* _tmp1_;
+ GtkMenu* _tmp2_;
+ GtkImageMenuItem* _tmp3_;
+ GtkImageMenuItem* _tmp4_;
+ GtkImageMenuItem* _tmp5_;
+ GtkMenu* _tmp6_;
+ GtkImageMenuItem* _tmp7_;
+ GtkImageMenuItem* _tmp8_;
+ GtkImageMenuItem* _tmp9_;
+ GtkImageMenuItem* _tmp10_;
+ GtkMenu* _tmp11_;
+ GtkImageMenuItem* _tmp12_;
+ GtkMenu* _tmp13_;
+ GtkSeparatorMenuItem* _tmp14_;
+ GtkSeparatorMenuItem* _tmp15_;
+ GtkImageMenuItem* _tmp16_;
+ GtkImageMenuItem* _tmp17_;
+ GtkImageMenuItem* _tmp18_;
+ const gchar* _tmp19_ = NULL;
+ GtkImageMenuItem* _tmp20_;
+ GtkMenu* _tmp21_;
+ GtkImageMenuItem* _tmp22_;
+ GtkImageMenuItem* _tmp23_;
+ GtkImageMenuItem* _tmp24_;
+ GtkImageMenuItem* _tmp25_;
+ GtkMenu* _tmp26_;
+ GtkImageMenuItem* _tmp27_;
+ GtkMenu* _tmp28_;
+ _tmp1_ = (GtkMenu*) gtk_menu_new ();
+ _tmp2_ = g_object_ref_sink (_tmp1_);
+ _g_object_unref0 (self->priv->m_sys_menu);
+ self->priv->m_sys_menu = _tmp2_;
+ _tmp3_ = (GtkImageMenuItem*) gtk_image_menu_item_new_from_stock (GTK_STOCK_PREFERENCES, NULL);
+ _tmp4_ = g_object_ref_sink (_tmp3_);
+ _g_object_unref0 (item);
+ item = _tmp4_;
+ _tmp5_ = item;
+ g_signal_connect_object ((GtkMenuItem*) _tmp5_, "activate", (GCallback) ____lambda17__gtk_menu_item_activate, self, 0);
+ _tmp6_ = self->priv->m_sys_menu;
+ _tmp7_ = item;
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp6_, (GtkWidget*) ((GtkMenuItem*) _tmp7_));
+ _tmp8_ = (GtkImageMenuItem*) gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL);
+ _tmp9_ = g_object_ref_sink (_tmp8_);
+ _g_object_unref0 (item);
+ item = _tmp9_;
+ _tmp10_ = item;
+ g_signal_connect_object ((GtkMenuItem*) _tmp10_, "activate", (GCallback) ____lambda19__gtk_menu_item_activate, self, 0);
+ _tmp11_ = self->priv->m_sys_menu;
+ _tmp12_ = item;
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp11_, (GtkWidget*) ((GtkMenuItem*) _tmp12_));
+ _tmp13_ = self->priv->m_sys_menu;
+ _tmp14_ = (GtkSeparatorMenuItem*) gtk_separator_menu_item_new ();
+ _tmp15_ = g_object_ref_sink (_tmp14_);
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp13_, (GtkWidget*) ((GtkMenuItem*) _tmp15_));
+ _g_object_unref0 (_tmp15_);
+ _tmp16_ = (GtkImageMenuItem*) gtk_image_menu_item_new_from_stock (GTK_STOCK_REFRESH, NULL);
+ _tmp17_ = g_object_ref_sink (_tmp16_);
+ _g_object_unref0 (item);
+ item = _tmp17_;
+ _tmp18_ = item;
+ _tmp19_ = _ ("Restart");
+ gtk_menu_item_set_label ((GtkMenuItem*) _tmp18_, _tmp19_);
+ _tmp20_ = item;
+ g_signal_connect_object ((GtkMenuItem*) _tmp20_, "activate", (GCallback) ____lambda20__gtk_menu_item_activate, self, 0);
+ _tmp21_ = self->priv->m_sys_menu;
+ _tmp22_ = item;
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp21_, (GtkWidget*) ((GtkMenuItem*) _tmp22_));
+ _tmp23_ = (GtkImageMenuItem*) gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
+ _tmp24_ = g_object_ref_sink (_tmp23_);
+ _g_object_unref0 (item);
+ item = _tmp24_;
+ _tmp25_ = item;
+ g_signal_connect_object ((GtkMenuItem*) _tmp25_, "activate", (GCallback) ____lambda21__gtk_menu_item_activate, self, 0);
+ _tmp26_ = self->priv->m_sys_menu;
+ _tmp27_ = item;
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp26_, (GtkWidget*) ((GtkMenuItem*) _tmp27_));
+ _tmp28_ = self->priv->m_sys_menu;
+ gtk_widget_show_all ((GtkWidget*) _tmp28_);
+ _g_object_unref0 (item);
+ }
+ _tmp29_ = self->priv->m_sys_menu;
+ _tmp30_ = self->priv->m_status_icon;
+ _tmp31_ = gtk_get_current_event_time ();
+ gtk_menu_popup (_tmp29_, NULL, NULL, _gtk_status_icon_position_menu_gtk_menu_position_func, _tmp30_, (guint) 0, _tmp31_);
+}
+
+
+static Block4Data* block4_data_ref (Block4Data* _data4_) {
+ g_atomic_int_inc (&_data4_->_ref_count_);
+ return _data4_;
+}
+
+
+static void block4_data_unref (Block4Data* _data4_) {
+ if (g_atomic_int_dec_and_test (&_data4_->_ref_count_)) {
+ Panel * self;
+ self = _data4_->self;
+ _g_object_unref0 (_data4_->e);
+ _g_object_unref0 (self);
+ g_slice_free (Block4Data, _data4_);
+ }
+}
+
+
+static void ____lambda22_ (Block4Data* _data4_, GtkMenuItem* item) {
+ Panel * self;
+ self = _data4_->self;
+ g_return_if_fail (item != NULL);
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp0_;
+ _tmp0_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp1_;
+ gint _tmp3_;
+ IBusEngineDesc** _tmp4_;
+ gint _tmp4__length1;
+ IBusEngineDesc* _tmp5_;
+ IBusEngineDesc** _tmp6_;
+ gint _tmp6__length1;
+ gint _tmp7_;
+ IBusEngineDesc* _tmp8_;
+ _tmp1_ = _tmp0_;
+ if (!_tmp1_) {
+ gint _tmp2_;
+ _tmp2_ = i;
+ i = _tmp2_ + 1;
+ }
+ _tmp0_ = FALSE;
+ _tmp3_ = i;
+ _tmp4_ = self->priv->m_engines;
+ _tmp4__length1 = self->priv->m_engines_length1;
+ if (!(_tmp3_ < _tmp4__length1)) {
+ break;
+ }
+ _tmp5_ = _data4_->e;
+ _tmp6_ = self->priv->m_engines;
+ _tmp6__length1 = self->priv->m_engines_length1;
+ _tmp7_ = i;
+ _tmp8_ = _tmp6_[_tmp7_];
+ if (_tmp5_ == _tmp8_) {
+ gint _tmp9_;
+ _tmp9_ = i;
+ panel_switch_engine (self, _tmp9_, FALSE);
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+static void _____lambda22__gtk_menu_item_activate (GtkMenuItem* _sender, gpointer self) {
+ ____lambda22_ (self, _sender);
+}
+
+
+static void panel_status_icon_activate_cb (Panel* self, GtkStatusIcon* status_icon) {
+ GtkMenu* _tmp0_;
+ GtkMenu* _tmp1_;
+ PropertyManager* _tmp2_;
+ GtkMenu* _tmp3_;
+ GtkMenu* _tmp4_;
+ GtkSeparatorMenuItem* _tmp5_;
+ GtkSeparatorMenuItem* _tmp6_;
+ gint width = 0;
+ gint height = 0;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+ IBusEngineDesc** _tmp9_;
+ gint _tmp9__length1;
+ GtkMenu* _tmp31_;
+ GtkMenu* _tmp32_;
+ GtkMenu* _tmp33_;
+ GtkStatusIcon* _tmp34_;
+ guint32 _tmp35_ = 0U;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (status_icon != NULL);
+ _tmp0_ = (GtkMenu*) gtk_menu_new ();
+ _tmp1_ = g_object_ref_sink (_tmp0_);
+ _g_object_unref0 (self->priv->m_ime_menu);
+ self->priv->m_ime_menu = _tmp1_;
+ _tmp2_ = self->priv->m_property_manager;
+ _tmp3_ = self->priv->m_ime_menu;
+ property_manager_create_menu_items (_tmp2_, _tmp3_);
+ _tmp4_ = self->priv->m_ime_menu;
+ _tmp5_ = (GtkSeparatorMenuItem*) gtk_separator_menu_item_new ();
+ _tmp6_ = g_object_ref_sink (_tmp5_);
+ gtk_menu_shell_append ((GtkMenuShell*) _tmp4_, (GtkWidget*) ((GtkMenuItem*) _tmp6_));
+ _g_object_unref0 (_tmp6_);
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &_tmp7_, &_tmp8_);
+ width = _tmp7_;
+ height = _tmp8_;
+ _tmp9_ = self->priv->m_engines;
+ _tmp9__length1 = self->priv->m_engines_length1;
+ {
+ IBusEngineDesc** engine_collection = NULL;
+ gint engine_collection_length1 = 0;
+ gint _engine_collection_size_ = 0;
+ gint engine_it = 0;
+ engine_collection = _tmp9_;
+ engine_collection_length1 = _tmp9__length1;
+ for (engine_it = 0; engine_it < _tmp9__length1; engine_it = engine_it + 1) {
+ IBusEngineDesc* _tmp10_;
+ IBusEngineDesc* engine = NULL;
+ _tmp10_ = _g_object_ref0 (engine_collection[engine_it]);
+ engine = _tmp10_;
+ {
+ Block4Data* _data4_;
+ IBusEngineDesc* _tmp11_;
+ const gchar* _tmp12_ = NULL;
+ gchar* _tmp13_;
+ gchar* longname;
+ const gchar* _tmp14_;
+ GtkImageMenuItem* _tmp15_;
+ GtkImageMenuItem* _tmp16_;
+ GtkImageMenuItem* item;
+ IBusEngineDesc* _tmp17_;
+ const gchar* _tmp18_ = NULL;
+ IBusEngineDesc* _tmp26_;
+ IBusEngineDesc* _tmp27_;
+ GtkImageMenuItem* _tmp28_;
+ GtkMenu* _tmp29_;
+ GtkImageMenuItem* _tmp30_;
+ _data4_ = g_slice_new0 (Block4Data);
+ _data4_->_ref_count_ = 1;
+ _data4_->self = g_object_ref (self);
+ _tmp11_ = engine;
+ _tmp12_ = ibus_engine_desc_get_longname (_tmp11_);
+ _tmp13_ = g_strdup (_tmp12_);
+ longname = _tmp13_;
+ _tmp14_ = longname;
+ _tmp15_ = (GtkImageMenuItem*) gtk_image_menu_item_new_with_label (_tmp14_);
+ _tmp16_ = g_object_ref_sink (_tmp15_);
+ item = _tmp16_;
+ _tmp17_ = engine;
+ _tmp18_ = ibus_engine_desc_get_icon (_tmp17_);
+ if (g_strcmp0 (_tmp18_, "") != 0) {
+ IBusEngineDesc* _tmp19_;
+ const gchar* _tmp20_ = NULL;
+ gint _tmp21_;
+ IconWidget* _tmp22_;
+ IconWidget* _tmp23_;
+ IconWidget* icon;
+ GtkImageMenuItem* _tmp24_;
+ IconWidget* _tmp25_;
+ _tmp19_ = engine;
+ _tmp20_ = ibus_engine_desc_get_icon (_tmp19_);
+ _tmp21_ = width;
+ _tmp22_ = icon_widget_new (_tmp20_, _tmp21_);
+ _tmp23_ = g_object_ref_sink (_tmp22_);
+ icon = _tmp23_;
+ _tmp24_ = item;
+ _tmp25_ = icon;
+ gtk_image_menu_item_set_image (_tmp24_, (GtkWidget*) _tmp25_);
+ _g_object_unref0 (icon);
+ }
+ _tmp26_ = engine;
+ _tmp27_ = _g_object_ref0 (_tmp26_);
+ _data4_->e = _tmp27_;
+ _tmp28_ = item;
+ g_signal_connect_data ((GtkMenuItem*) _tmp28_, "activate", (GCallback) _____lambda22__gtk_menu_item_activate, block4_data_ref (_data4_), (GClosureNotify) block4_data_unref, 0);
+ _tmp29_ = self->priv->m_ime_menu;
+ _tmp30_ = item;
+ gtk_container_add ((GtkContainer*) _tmp29_, (GtkWidget*) _tmp30_);
+ _g_object_unref0 (item);
+ _g_free0 (longname);
+ _g_object_unref0 (engine);
+ block4_data_unref (_data4_);
+ _data4_ = NULL;
+ }
+ }
+ }
+ _tmp31_ = self->priv->m_ime_menu;
+ gtk_widget_show_all ((GtkWidget*) _tmp31_);
+ _tmp32_ = self->priv->m_ime_menu;
+ gtk_menu_shell_set_take_focus ((GtkMenuShell*) _tmp32_, FALSE);
+ _tmp33_ = self->priv->m_ime_menu;
+ _tmp34_ = self->priv->m_status_icon;
+ _tmp35_ = gtk_get_current_event_time ();
+ gtk_menu_popup (_tmp33_, NULL, NULL, _gtk_status_icon_position_menu_gtk_menu_position_func, _tmp34_, (guint) 0, _tmp35_);
+}
+
+
+static void panel_real_set_cursor_location (IBusPanelService* base, gint x, gint y, gint width, gint height) {
+ Panel * self;
+ CandidatePanel* _tmp0_;
+ gint _tmp1_;
+ gint _tmp2_;
+ gint _tmp3_;
+ gint _tmp4_;
+ self = (Panel*) base;
+ _tmp0_ = self->priv->m_candidate_panel;
+ _tmp1_ = x;
+ _tmp2_ = y;
+ _tmp3_ = width;
+ _tmp4_ = height;
+ candidate_panel_set_cursor_location (_tmp0_, _tmp1_, _tmp2_, _tmp3_, _tmp4_);
+}
+
+
+static void panel_real_focus_in (IBusPanelService* base, const gchar* input_context_path) {
+ Panel * self;
+ self = (Panel*) base;
+ g_return_if_fail (input_context_path != NULL);
+}
+
+
+static void panel_real_focus_out (IBusPanelService* base, const gchar* input_context_path) {
+ Panel * self;
+ self = (Panel*) base;
+ g_return_if_fail (input_context_path != NULL);
+}
+
+
+static void panel_real_register_properties (IBusPanelService* base, IBusPropList* props) {
+ Panel * self;
+ PropertyManager* _tmp0_;
+ IBusPropList* _tmp1_;
+ self = (Panel*) base;
+ g_return_if_fail (props != NULL);
+ _tmp0_ = self->priv->m_property_manager;
+ _tmp1_ = props;
+ property_manager_set_properties (_tmp0_, _tmp1_);
+}
+
+
+static void panel_real_update_property (IBusPanelService* base, IBusProperty* prop) {
+ Panel * self;
+ PropertyManager* _tmp0_;
+ IBusProperty* _tmp1_;
+ self = (Panel*) base;
+ g_return_if_fail (prop != NULL);
+ _tmp0_ = self->priv->m_property_manager;
+ _tmp1_ = prop;
+ property_manager_update_property (_tmp0_, _tmp1_);
+}
+
+
+static void panel_real_update_preedit_text (IBusPanelService* base, IBusText* text, guint cursor_pos, gboolean visible) {
+ Panel * self;
+ gboolean _tmp0_;
+ self = (Panel*) base;
+ g_return_if_fail (text != NULL);
+ _tmp0_ = visible;
+ if (_tmp0_) {
+ CandidatePanel* _tmp1_;
+ IBusText* _tmp2_;
+ guint _tmp3_;
+ _tmp1_ = self->priv->m_candidate_panel;
+ _tmp2_ = text;
+ _tmp3_ = cursor_pos;
+ candidate_panel_set_preedit_text (_tmp1_, _tmp2_, _tmp3_);
+ } else {
+ CandidatePanel* _tmp4_;
+ _tmp4_ = self->priv->m_candidate_panel;
+ candidate_panel_set_preedit_text (_tmp4_, NULL, (guint) 0);
+ }
+}
+
+
+static void panel_real_hide_preedit_text (IBusPanelService* base) {
+ Panel * self;
+ CandidatePanel* _tmp0_;
+ self = (Panel*) base;
+ _tmp0_ = self->priv->m_candidate_panel;
+ candidate_panel_set_preedit_text (_tmp0_, NULL, (guint) 0);
+}
+
+
+static void panel_real_update_auxiliary_text (IBusPanelService* base, IBusText* text, gboolean visible) {
+ Panel * self;
+ IBusText* _tmp0_ = NULL;
+ gboolean _tmp1_;
+ CandidatePanel* _tmp3_;
+ IBusText* _tmp4_;
+ self = (Panel*) base;
+ g_return_if_fail (text != NULL);
+ _tmp1_ = visible;
+ if (_tmp1_) {
+ IBusText* _tmp2_;
+ _tmp2_ = text;
+ _tmp0_ = _tmp2_;
+ } else {
+ _tmp0_ = NULL;
+ }
+ _tmp3_ = self->priv->m_candidate_panel;
+ _tmp4_ = _tmp0_;
+ candidate_panel_set_auxiliary_text (_tmp3_, _tmp4_);
+}
+
+
+static void panel_real_hide_auxiliary_text (IBusPanelService* base) {
+ Panel * self;
+ CandidatePanel* _tmp0_;
+ self = (Panel*) base;
+ _tmp0_ = self->priv->m_candidate_panel;
+ candidate_panel_set_auxiliary_text (_tmp0_, NULL);
+}
+
+
+static void panel_real_update_lookup_table (IBusPanelService* base, IBusLookupTable* table, gboolean visible) {
+ Panel * self;
+ IBusLookupTable* _tmp0_ = NULL;
+ gboolean _tmp1_;
+ CandidatePanel* _tmp3_;
+ IBusLookupTable* _tmp4_;
+ self = (Panel*) base;
+ g_return_if_fail (table != NULL);
+ _tmp1_ = visible;
+ if (_tmp1_) {
+ IBusLookupTable* _tmp2_;
+ _tmp2_ = table;
+ _tmp0_ = _tmp2_;
+ } else {
+ _tmp0_ = NULL;
+ }
+ _tmp3_ = self->priv->m_candidate_panel;
+ _tmp4_ = _tmp0_;
+ candidate_panel_set_lookup_table (_tmp3_, _tmp4_);
+}
+
+
+static void panel_real_hide_lookup_table (IBusPanelService* base) {
+ Panel * self;
+ CandidatePanel* _tmp0_;
+ self = (Panel*) base;
+ _tmp0_ = self->priv->m_candidate_panel;
+ candidate_panel_set_lookup_table (_tmp0_, NULL);
+}
+
+
+static gchar string_get (const gchar* self, glong index) {
+ gchar result = '\0';
+ glong _tmp0_;
+ gchar _tmp1_;
+ g_return_val_if_fail (self != NULL, '\0');
+ _tmp0_ = index;
+ _tmp1_ = ((gchar*) self)[_tmp0_];
+ result = _tmp1_;
+ return result;
+}
+
+
+static void panel_real_state_changed (IBusPanelService* base) {
+ Panel * self;
+ gchar* _tmp0_;
+ gchar* icon_name;
+ IBusBus* _tmp1_;
+ IBusEngineDesc* _tmp2_ = NULL;
+ IBusEngineDesc* _tmp3_;
+ IBusEngineDesc* engine;
+ IBusEngineDesc* _tmp4_;
+ const gchar* _tmp8_;
+ gchar _tmp9_ = '\0';
+ self = (Panel*) base;
+ _tmp0_ = g_strdup ("ibus-keyboard");
+ icon_name = _tmp0_;
+ _tmp1_ = self->priv->m_bus;
+ _tmp2_ = ibus_bus_get_global_engine (_tmp1_);
+ _tmp3_ = _g_object_ref0 (_tmp2_);
+ engine = _tmp3_;
+ _tmp4_ = engine;
+ if (_tmp4_ != NULL) {
+ IBusEngineDesc* _tmp5_;
+ const gchar* _tmp6_ = NULL;
+ gchar* _tmp7_;
+ _tmp5_ = engine;
+ _tmp6_ = ibus_engine_desc_get_icon (_tmp5_);
+ _tmp7_ = g_strdup (_tmp6_);
+ _g_free0 (icon_name);
+ icon_name = _tmp7_;
+ }
+ _tmp8_ = icon_name;
+ _tmp9_ = string_get (_tmp8_, (glong) 0);
+ if (_tmp9_ == '/') {
+ GtkStatusIcon* _tmp10_;
+ const gchar* _tmp11_;
+ _tmp10_ = self->priv->m_status_icon;
+ _tmp11_ = icon_name;
+ gtk_status_icon_set_from_file (_tmp10_, _tmp11_);
+ } else {
+ GtkStatusIcon* _tmp12_;
+ const gchar* _tmp13_;
+ _tmp12_ = self->priv->m_status_icon;
+ _tmp13_ = icon_name;
+ gtk_status_icon_set_from_icon_name (_tmp12_, _tmp13_);
+ }
+ _g_object_unref0 (engine);
+ _g_free0 (icon_name);
+}
+
+
+static void panel_class_init (PanelClass * klass) {
+ panel_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (PanelPrivate));
+ IBUS_PANEL_SERVICE_CLASS (klass)->set_cursor_location = panel_real_set_cursor_location;
+ IBUS_PANEL_SERVICE_CLASS (klass)->focus_in = panel_real_focus_in;
+ IBUS_PANEL_SERVICE_CLASS (klass)->focus_out = panel_real_focus_out;
+ IBUS_PANEL_SERVICE_CLASS (klass)->register_properties = panel_real_register_properties;
+ IBUS_PANEL_SERVICE_CLASS (klass)->update_property = panel_real_update_property;
+ IBUS_PANEL_SERVICE_CLASS (klass)->update_preedit_text = panel_real_update_preedit_text;
+ IBUS_PANEL_SERVICE_CLASS (klass)->hide_preedit_text = panel_real_hide_preedit_text;
+ IBUS_PANEL_SERVICE_CLASS (klass)->update_auxiliary_text = panel_real_update_auxiliary_text;
+ IBUS_PANEL_SERVICE_CLASS (klass)->hide_auxiliary_text = panel_real_hide_auxiliary_text;
+ IBUS_PANEL_SERVICE_CLASS (klass)->update_lookup_table = panel_real_update_lookup_table;
+ IBUS_PANEL_SERVICE_CLASS (klass)->hide_lookup_table = panel_real_hide_lookup_table;
+ IBUS_PANEL_SERVICE_CLASS (klass)->state_changed = panel_real_state_changed;
+ G_OBJECT_CLASS (klass)->finalize = panel_finalize;
+}
+
+
+static void panel_instance_init (Panel * self) {
+ IBusEngineDesc** _tmp0_ = NULL;
+ gchar** _tmp1_ = NULL;
+ gchar** _tmp2_ = NULL;
+ gchar** _tmp3_ = NULL;
+ self->priv = PANEL_GET_PRIVATE (self);
+ _tmp0_ = g_new0 (IBusEngineDesc*, 0 + 1);
+ self->priv->m_engines = _tmp0_;
+ self->priv->m_engines_length1 = 0;
+ self->priv->_m_engines_size_ = self->priv->m_engines_length1;
+ self->priv->m_setup_pid = (GPid) 0;
+ self->priv->m_gkbdlayout = NULL;
+ self->priv->m_xkblayout = NULL;
+ _tmp1_ = g_new0 (gchar*, 0 + 1);
+ self->priv->m_layouts = _tmp1_;
+ self->priv->m_layouts_length1 = 0;
+ self->priv->_m_layouts_size_ = self->priv->m_layouts_length1;
+ _tmp2_ = g_new0 (gchar*, 0 + 1);
+ self->priv->m_variants = _tmp2_;
+ self->priv->m_variants_length1 = 0;
+ self->priv->_m_variants_size_ = self->priv->m_variants_length1;
+ self->priv->m_fallback_lock_id = -1;
+ self->priv->m_changed_xkb_option = FALSE;
+ _tmp3_ = g_new0 (gchar*, 0 + 1);
+ self->priv->ACCELERATOR_IME_HOTKEYS = _tmp3_;
+ self->priv->ACCELERATOR_IME_HOTKEYS_length1 = 0;
+ self->priv->_ACCELERATOR_IME_HOTKEYS_size_ = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+}
+
+
+static void panel_finalize (GObject* obj) {
+ Panel * self;
+ KeybindingManager* _tmp0_ = NULL;
+ KeybindingManager* keybinding_manager;
+ gchar** _tmp1_;
+ gint _tmp1__length1;
+ gboolean _tmp7_ = FALSE;
+ gboolean _tmp9_;
+ self = PANEL (obj);
+ _tmp0_ = keybinding_manager_get_instance ();
+ keybinding_manager = _tmp0_;
+ _tmp1_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp1__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gchar** keybinding_collection = NULL;
+ gint keybinding_collection_length1 = 0;
+ gint _keybinding_collection_size_ = 0;
+ gint keybinding_it = 0;
+ keybinding_collection = _tmp1_;
+ keybinding_collection_length1 = _tmp1__length1;
+ for (keybinding_it = 0; keybinding_it < _tmp1__length1; keybinding_it = keybinding_it + 1) {
+ gchar* _tmp2_;
+ gchar* keybinding = NULL;
+ _tmp2_ = g_strdup (keybinding_collection[keybinding_it]);
+ keybinding = _tmp2_;
+ {
+ KeybindingManager* _tmp3_;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ _tmp3_ = keybinding_manager;
+ _tmp4_ = keybinding;
+ keybinding_manager_unbind (_tmp3_, _tmp4_);
+ _tmp5_ = keybinding;
+ if (g_strcmp0 (_tmp5_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0) {
+ KeybindingManager* _tmp6_;
+ _tmp6_ = keybinding_manager;
+ keybinding_manager_unbind (_tmp6_, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD);
+ }
+ _g_free0 (keybinding);
+ }
+ }
+ }
+ if (HAVE_IBUS_GKBD) {
+ GkbdLayout* _tmp8_;
+ _tmp8_ = self->priv->m_gkbdlayout;
+ _tmp7_ = _tmp8_ != NULL;
+ } else {
+ _tmp7_ = FALSE;
+ }
+ _tmp9_ = _tmp7_;
+ if (_tmp9_) {
+ GkbdLayout* _tmp10_;
+ guint _tmp11_ = 0U;
+ GkbdLayout* _tmp12_;
+ _tmp10_ = self->priv->m_gkbdlayout;
+ g_signal_parse_name ("changed", TYPE_GKBD_LAYOUT, &_tmp11_, NULL, FALSE);
+ g_signal_handlers_disconnect_matched (_tmp10_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp11_, 0, NULL, (GCallback) _panel_gkbdlayout_changed_cb_gkbd_layout_changed, self);
+ _tmp12_ = self->priv->m_gkbdlayout;
+ gkbd_layout_stop_listen (_tmp12_);
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ self->priv->m_gkbdlayout = NULL;
+ }
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_xkblayout = NULL;
+ _g_object_unref0 (keybinding_manager);
+ _g_object_unref0 (self->priv->m_bus);
+ _g_object_unref0 (self->priv->m_config);
+ _g_object_unref0 (self->priv->m_status_icon);
+ _g_object_unref0 (self->priv->m_ime_menu);
+ _g_object_unref0 (self->priv->m_sys_menu);
+ self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
+ _g_object_unref0 (self->priv->m_candidate_panel);
+ _g_object_unref0 (self->priv->m_switcher);
+ _property_manager_unref0 (self->priv->m_property_manager);
+ _g_object_unref0 (self->priv->m_about_dialog);
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_layouts = (_vala_array_free (self->priv->m_layouts, self->priv->m_layouts_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_variants = (_vala_array_free (self->priv->m_variants, self->priv->m_variants_length1, (GDestroyNotify) g_free), NULL);
+ _g_timer_destroy0 (self->priv->m_changed_layout_timer);
+ self->priv->ACCELERATOR_IME_HOTKEYS = (_vala_array_free (self->priv->ACCELERATOR_IME_HOTKEYS, self->priv->ACCELERATOR_IME_HOTKEYS_length1, (GDestroyNotify) g_free), NULL);
+ G_OBJECT_CLASS (panel_parent_class)->finalize (obj);
+}
+
+
+GType panel_get_type (void) {
+ static volatile gsize panel_type_id__volatile = 0;
+ if (g_once_init_enter (&panel_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PanelClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) panel_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Panel), 0, (GInstanceInitFunc) panel_instance_init, NULL };
+ GType panel_type_id;
+ panel_type_id = g_type_register_static (ibus_panel_service_get_type (), "Panel", &g_define_type_info, 0);
+ g_once_init_leave (&panel_type_id__volatile, panel_type_id);
+ }
+ return panel_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+
--- ibus/ui/gtk3/panel.c.orig 2012-03-09 18:53:39.271243400 +0900
+++ ibus/ui/gtk3/panel.c 2012-03-09 18:54:51.594556206 +0900
@@ -29,7 +29,10 @@
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
+#include <locale.h>
#include <gdk/gdk.h>
+#include <float.h>
+#include <math.h>
#include <signal.h>
#include <sys/types.h>
#include <glib/gi18n-lib.h>
@@ -76,6 +79,26 @@ typedef struct _SwitcherClass SwitcherCl
typedef struct _PropertyManager PropertyManager;
typedef struct _PropertyManagerClass PropertyManagerClass;
+#define TYPE_GKBD_LAYOUT (gkbd_layout_get_type ())
+#define GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GKBD_LAYOUT, GkbdLayout))
+#define GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+#define IS_GKBD_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GKBD_LAYOUT))
+#define IS_GKBD_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GKBD_LAYOUT))
+#define GKBD_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GKBD_LAYOUT, GkbdLayoutClass))
+
+typedef struct _GkbdLayout GkbdLayout;
+typedef struct _GkbdLayoutClass GkbdLayoutClass;
+
+#define TYPE_XKB_LAYOUT (xkb_layout_get_type ())
+#define XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_XKB_LAYOUT, XKBLayout))
+#define XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_XKB_LAYOUT, XKBLayoutClass))
+#define IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_XKB_LAYOUT))
+#define IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_XKB_LAYOUT))
+#define XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_XKB_LAYOUT, XKBLayoutClass))
+
+typedef struct _XKBLayout XKBLayout;
+typedef struct _XKBLayoutClass XKBLayoutClass;
+
#define TYPE_KEYBINDING_MANAGER (keybinding_manager_get_type ())
#define KEYBINDING_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_KEYBINDING_MANAGER, KeybindingManager))
#define KEYBINDING_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_KEYBINDING_MANAGER, KeybindingManagerClass))
@@ -85,10 +108,14 @@ typedef struct _PropertyManagerClass Pro
typedef struct _KeybindingManager KeybindingManager;
typedef struct _KeybindingManagerClass KeybindingManagerClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _gkbd_layout_unref0(var) ((var == NULL) ? NULL : (var = (gkbd_layout_unref (var), NULL)))
+#define _xkb_layout_unref0(var) ((var == NULL) ? NULL : (var = (xkb_layout_unref (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _property_manager_unref0(var) ((var == NULL) ? NULL : (var = (property_manager_unref (var), NULL)))
+#define _g_timer_destroy0(var) ((var == NULL) ? NULL : (var = (g_timer_destroy (var), NULL)))
#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
-#define _g_free0(var) (var = (g_free (var), NULL))
+#define __g_list_free__g_free0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_free0_ (var), NULL)))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
typedef struct _Block4Data Block4Data;
@@ -125,6 +152,20 @@ struct _PanelPrivate {
PropertyManager* m_property_manager;
GPid m_setup_pid;
GtkAboutDialog* m_about_dialog;
+ GkbdLayout* m_gkbdlayout;
+ XKBLayout* m_xkblayout;
+ gchar** m_layouts;
+ gint m_layouts_length1;
+ gint _m_layouts_size_;
+ gchar** m_variants;
+ gint m_variants_length1;
+ gint _m_variants_size_;
+ gint m_fallback_lock_id;
+ gboolean m_changed_xkb_option;
+ GTimer* m_changed_layout_timer;
+ gchar** ACCELERATOR_IME_HOTKEYS;
+ gint ACCELERATOR_IME_HOTKEYS_length1;
+ gint _ACCELERATOR_IME_HOTKEYS_size_;
};
typedef void (*KeybindingManagerKeybindingHandlerFunc) (GdkEvent* event, void* user_data);
@@ -147,6 +188,20 @@ void value_set_property_manager (GValue*
void value_take_property_manager (GValue* value, gpointer v_object);
gpointer value_get_property_manager (const GValue* value);
GType property_manager_get_type (void) G_GNUC_CONST;
+gpointer gkbd_layout_ref (gpointer instance);
+void gkbd_layout_unref (gpointer instance);
+GParamSpec* param_spec_gkbd_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_gkbd_layout (GValue* value, gpointer v_object);
+void value_take_gkbd_layout (GValue* value, gpointer v_object);
+gpointer value_get_gkbd_layout (const GValue* value);
+GType gkbd_layout_get_type (void) G_GNUC_CONST;
+gpointer xkb_layout_ref (gpointer instance);
+void xkb_layout_unref (gpointer instance);
+GParamSpec* param_spec_xkb_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_xkb_layout (GValue* value, gpointer v_object);
+void value_take_xkb_layout (GValue* value, gpointer v_object);
+gpointer value_get_xkb_layout (const GValue* value);
+GType xkb_layout_get_type (void) G_GNUC_CONST;
#define PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_PANEL, PanelPrivate))
enum {
PANEL_DUMMY_PROPERTY
@@ -156,6 +211,9 @@ KeybindingManager* keybinding_manager_ge
void keybinding_manager_unbind (KeybindingManager* self, const gchar* accelerator);
#define PANEL_ACCELERATOR_SWITCH_IME_FOREWARD "<Control>space"
#define PANEL_ACCELERATOR_SWITCH_IME_BACKWARD "<Control><Shift>space"
+static void panel_gkbdlayout_changed_cb (Panel* self);
+static void _panel_gkbdlayout_changed_cb_gkbd_layout_changed (GkbdLayout* _sender, gpointer self);
+void gkbd_layout_stop_listen (GkbdLayout* self);
Panel* panel_new (IBusBus* bus);
Panel* panel_construct (GType object_type, IBusBus* bus);
static void panel_status_icon_popup_menu_cb (Panel* self, GtkStatusIcon* status_icon, guint button, guint activate_time);
@@ -170,31 +228,58 @@ static void __lambda24_ (Panel* self, Ca
static void ___lambda24__candidate_panel_page_down (CandidatePanel* _sender, gpointer self);
Switcher* switcher_new (void);
Switcher* switcher_construct (GType object_type);
-gboolean keybinding_manager_bind (KeybindingManager* self, const gchar* accelerator, KeybindingManagerKeybindingHandlerFunc handler, void* handler_target);
-static void __lambda25_ (Panel* self, GdkEvent* e);
-static void panel_handle_engine_switch (Panel* self, GdkEvent* event, gboolean revert);
-static void ___lambda25__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
-static void __lambda26_ (Panel* self, GdkEvent* e);
-static void ___lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
PropertyManager* property_manager_new (void);
PropertyManager* property_manager_construct (GType object_type);
-static void __lambda27_ (Panel* self, const gchar* k, gint s);
-static void ___lambda27__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self);
+static void __lambda25_ (Panel* self, const gchar* k, gint s);
+static void ___lambda25__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self);
+static void panel_set_keybinding (Panel* self);
+static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add12 (gchar*** array, int* length, int* size, gchar* value);
+gboolean keybinding_manager_bind (KeybindingManager* self, const gchar* accelerator, KeybindingManagerKeybindingHandlerFunc handler, void* handler_target);
+static void ____lambda26_ (Panel* self, GdkEvent* e);
+static void panel_handle_engine_switch (Panel* self, GdkEvent* event, gboolean revert);
+static void _____lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
+static void _____lambda27_ (Panel* self, GdkEvent* e);
+static void ______lambda27__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self);
void panel_set_config (Panel* self, IBusConfig* config);
static void panel_config_value_changed_cb (Panel* self, IBusConfig* config, const gchar* section, const gchar* name, GVariant* variant);
static void _panel_config_value_changed_cb_ibus_config_value_changed (IBusConfig* _sender, const gchar* section, const gchar* name, GVariant* value, gpointer self);
+static void panel_init_engines_order (Panel* self);
static void panel_update_engines (Panel* self, GVariant* var_engines, GVariant* var_order);
+void gkbd_layout_lock_group (GkbdLayout* self, gint id);
+void xkb_layout_reset_layout (XKBLayout* self);
+static void panel_update_xkb_engines (Panel* self);
+static void panel_init_gkbd (Panel* self);
+GkbdLayout* gkbd_layout_new (void);
+GkbdLayout* gkbd_layout_construct (GType object_type);
+void gkbd_layout_start_listen (GkbdLayout* self);
+XKBLayout* xkb_layout_new (IBusConfig* config);
+XKBLayout* xkb_layout_construct (GType object_type, IBusConfig* config);
+gchar* xkb_layout_get_layout (XKBLayout* self);
+gchar* xkb_layout_get_variant (XKBLayout* self);
+static void _g_free0_ (gpointer var);
+static void _g_list_free__g_free0_ (GList* self);
+static void _vala_array_add13 (gchar*** array, int* length, int* size, gchar* value);
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle);
+static void _vala_array_add14 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add15 (gchar*** array, int* length, int* size, gchar* value);
+static void panel_set_xkb_group_layout (Panel* self, const gchar* layout);
+gint* xkb_layout_set_layout (XKBLayout* self, const gchar* _layout, const gchar* _variant, const gchar* _option, int* result_length1);
+static gboolean panel_set_gkbd_layout (Panel* self, const gchar* layout);
+gchar** gkbd_layout_get_group_names (GkbdLayout* self, int* result_length1);
+static void panel_set_layout (Panel* self, const gchar* layout);
static void panel_switch_engine (Panel* self, gint i, gboolean force);
-static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add16 (gchar*** array, int* length, int* size, gchar* value);
guint keybinding_manager_get_primary_modifier (guint binding_mask);
gboolean keybinding_manager_primary_modifier_still_pressed (GdkEvent* event, guint primary_modifier);
gint switcher_run (Switcher* self, GdkEvent* event, IBusEngineDesc** engines, int engines_length1, gint index);
-static gchar** _vala_array_dup2 (gchar** self, int length);
-static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle);
-static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value);
-static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value);
-static IBusEngineDesc** _vala_array_dup3 (IBusEngineDesc** self, int length);
-static IBusEngineDesc** _vala_array_dup4 (IBusEngineDesc** self, int length);
+static gchar** _vala_array_dup4 (gchar** self, int length);
+static void _vala_array_add17 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add18 (gchar*** array, int* length, int* size, gchar* value);
+static IBusEngineDesc** _vala_array_dup5 (IBusEngineDesc** self, int length);
+static IBusEngineDesc** _vala_array_dup6 (IBusEngineDesc** self, int length);
static void panel_show_setup_dialog (Panel* self);
static void __lambda18_ (Panel* self, GPid pid, gint state);
static void ___lambda18__gchild_watch_func (GPid pid, gint status, gpointer self);
@@ -240,6 +325,11 @@ static void _vala_array_free (gpointer a
static gint _vala_array_length (gpointer array);
+static void _panel_gkbdlayout_changed_cb_gkbd_layout_changed (GkbdLayout* _sender, gpointer self) {
+ panel_gkbdlayout_changed_cb (self);
+}
+
+
static gpointer _g_object_ref0 (gpointer self) {
return self ? g_object_ref (self) : NULL;
}
@@ -277,33 +367,7 @@ static void ___lambda24__candidate_panel
}
-static void __lambda25_ (Panel* self, GdkEvent* e) {
- GdkEvent* _tmp0_;
- g_return_if_fail (e != NULL);
- _tmp0_ = e;
- panel_handle_engine_switch (self, _tmp0_, FALSE);
-}
-
-
-static void ___lambda25__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
- __lambda25_ (self, event);
-}
-
-
-static void __lambda26_ (Panel* self, GdkEvent* e) {
- GdkEvent* _tmp0_;
- g_return_if_fail (e != NULL);
- _tmp0_ = e;
- panel_handle_engine_switch (self, _tmp0_, TRUE);
-}
-
-
-static void ___lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
- __lambda26_ (self, event);
-}
-
-
-static void __lambda27_ (Panel* self, const gchar* k, gint s) {
+static void __lambda25_ (Panel* self, const gchar* k, gint s) {
const gchar* _tmp0_;
gint _tmp1_;
g_return_if_fail (k != NULL);
@@ -313,8 +377,8 @@ static void __lambda27_ (Panel* self, co
}
-static void ___lambda27__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self) {
- __lambda27_ (self, key, state);
+static void ___lambda25__property_manager_property_activate (PropertyManager* _sender, const gchar* key, gint state, gpointer self) {
+ __lambda25_ (self, key, state);
}
@@ -338,10 +402,8 @@ Panel* panel_construct (GType object_typ
CandidatePanel* _tmp15_;
Switcher* _tmp16_;
Switcher* _tmp17_;
- KeybindingManager* _tmp18_ = NULL;
- KeybindingManager* keybinding_manager;
+ PropertyManager* _tmp18_;
PropertyManager* _tmp19_;
- PropertyManager* _tmp20_;
g_return_val_if_fail (bus != NULL, NULL);
_tmp0_ = bus;
_tmp1_ = ibus_bus_is_connected (_tmp0_);
@@ -378,17 +440,12 @@ Panel* panel_construct (GType object_typ
_tmp17_ = g_object_ref_sink (_tmp16_);
_g_object_unref0 (self->priv->m_switcher);
self->priv->m_switcher = _tmp17_;
- _tmp18_ = keybinding_manager_get_instance ();
- keybinding_manager = _tmp18_;
- keybinding_manager_bind (keybinding_manager, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD, ___lambda25__keybinding_manager_keybinding_handler_func, self);
- keybinding_manager_bind (keybinding_manager, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD, ___lambda26__keybinding_manager_keybinding_handler_func, self);
- _tmp19_ = property_manager_new ();
+ _tmp18_ = property_manager_new ();
_property_manager_unref0 (self->priv->m_property_manager);
- self->priv->m_property_manager = _tmp19_;
- _tmp20_ = self->priv->m_property_manager;
- g_signal_connect_object (_tmp20_, "property-activate", (GCallback) ___lambda27__property_manager_property_activate, self, 0);
+ self->priv->m_property_manager = _tmp18_;
+ _tmp19_ = self->priv->m_property_manager;
+ g_signal_connect_object (_tmp19_, "property-activate", (GCallback) ___lambda25__property_manager_property_activate, self, 0);
g_signal_emit_by_name ((IBusPanelService*) self, "state-changed");
- _g_object_unref0 (keybinding_manager);
return self;
}
@@ -398,6 +455,321 @@ Panel* panel_new (IBusBus* bus) {
}
+static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static gchar* string_slice (const gchar* self, glong start, glong end) {
+ gchar* result = NULL;
+ gint _tmp0_;
+ gint _tmp1_;
+ glong string_length;
+ glong _tmp2_;
+ glong _tmp5_;
+ gboolean _tmp8_ = FALSE;
+ glong _tmp9_;
+ gboolean _tmp12_;
+ gboolean _tmp13_ = FALSE;
+ glong _tmp14_;
+ gboolean _tmp17_;
+ glong _tmp18_;
+ glong _tmp19_;
+ glong _tmp20_;
+ glong _tmp21_;
+ glong _tmp22_;
+ gchar* _tmp23_ = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = strlen (self);
+ _tmp1_ = _tmp0_;
+ string_length = (glong) _tmp1_;
+ _tmp2_ = start;
+ if (_tmp2_ < ((glong) 0)) {
+ glong _tmp3_;
+ glong _tmp4_;
+ _tmp3_ = string_length;
+ _tmp4_ = start;
+ start = _tmp3_ + _tmp4_;
+ }
+ _tmp5_ = end;
+ if (_tmp5_ < ((glong) 0)) {
+ glong _tmp6_;
+ glong _tmp7_;
+ _tmp6_ = string_length;
+ _tmp7_ = end;
+ end = _tmp6_ + _tmp7_;
+ }
+ _tmp9_ = start;
+ if (_tmp9_ >= ((glong) 0)) {
+ glong _tmp10_;
+ glong _tmp11_;
+ _tmp10_ = start;
+ _tmp11_ = string_length;
+ _tmp8_ = _tmp10_ <= _tmp11_;
+ } else {
+ _tmp8_ = FALSE;
+ }
+ _tmp12_ = _tmp8_;
+ g_return_val_if_fail (_tmp12_, NULL);
+ _tmp14_ = end;
+ if (_tmp14_ >= ((glong) 0)) {
+ glong _tmp15_;
+ glong _tmp16_;
+ _tmp15_ = end;
+ _tmp16_ = string_length;
+ _tmp13_ = _tmp15_ <= _tmp16_;
+ } else {
+ _tmp13_ = FALSE;
+ }
+ _tmp17_ = _tmp13_;
+ g_return_val_if_fail (_tmp17_, NULL);
+ _tmp18_ = start;
+ _tmp19_ = end;
+ g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
+ _tmp20_ = start;
+ _tmp21_ = end;
+ _tmp22_ = start;
+ _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
+ result = _tmp23_;
+ return result;
+}
+
+
+static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add12 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void ____lambda26_ (Panel* self, GdkEvent* e) {
+ GdkEvent* _tmp0_;
+ g_return_if_fail (e != NULL);
+ _tmp0_ = e;
+ panel_handle_engine_switch (self, _tmp0_, FALSE);
+}
+
+
+static void _____lambda26__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
+ ____lambda26_ (self, event);
+}
+
+
+static void _____lambda27_ (Panel* self, GdkEvent* e) {
+ GdkEvent* _tmp0_;
+ g_return_if_fail (e != NULL);
+ _tmp0_ = e;
+ panel_handle_engine_switch (self, _tmp0_, TRUE);
+}
+
+
+static void ______lambda27__keybinding_manager_keybinding_handler_func (GdkEvent* event, gpointer self) {
+ _____lambda27_ (self, event);
+}
+
+
+static void panel_set_keybinding (Panel* self) {
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_;
+ gchar* locale;
+ const gchar* _tmp2_;
+ gchar** _tmp4_;
+ gint _tmp4__length1;
+ gchar* _tmp5_;
+ IBusConfig* _tmp6_;
+ gboolean _tmp23_ = FALSE;
+ gchar** _tmp24_;
+ gint _tmp24__length1;
+ gboolean _tmp27_;
+ KeybindingManager* _tmp36_ = NULL;
+ KeybindingManager* keybinding_manager;
+ gchar** _tmp37_;
+ gint _tmp37__length1;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = setlocale (LC_ALL, NULL);
+ _tmp1_ = g_strdup (_tmp0_);
+ locale = _tmp1_;
+ _tmp2_ = locale;
+ if (_tmp2_ == NULL) {
+ gchar* _tmp3_;
+ _tmp3_ = g_strdup ("C");
+ _g_free0 (locale);
+ locale = _tmp3_;
+ }
+ _tmp4_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp4__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp5_ = g_strdup (PANEL_ACCELERATOR_SWITCH_IME_FOREWARD);
+ _vala_array_add9 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp5_);
+ _tmp6_ = self->priv->m_config;
+ if (_tmp6_ != NULL) {
+ IBusConfig* _tmp7_;
+ GVariant* _tmp8_ = NULL;
+ GVariant* variant;
+ GVariant* _tmp9_;
+ _tmp7_ = self->priv->m_config;
+ _tmp8_ = ibus_config_get_value (_tmp7_, "general/hotkey", "trigger_accel");
+ variant = _tmp8_;
+ _tmp9_ = variant;
+ if (_tmp9_ != NULL) {
+ gchar** _tmp10_ = NULL;
+ _tmp10_ = g_new0 (gchar*, 0 + 1);
+ self->priv->ACCELERATOR_IME_HOTKEYS = (_vala_array_free (self->priv->ACCELERATOR_IME_HOTKEYS, self->priv->ACCELERATOR_IME_HOTKEYS_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->ACCELERATOR_IME_HOTKEYS = _tmp10_;
+ self->priv->ACCELERATOR_IME_HOTKEYS_length1 = 0;
+ self->priv->_ACCELERATOR_IME_HOTKEYS_size_ = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp11_;
+ _tmp11_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp12_;
+ gint _tmp14_;
+ GVariant* _tmp15_;
+ gsize _tmp16_ = 0UL;
+ gchar** _tmp17_;
+ gint _tmp17__length1;
+ GVariant* _tmp18_;
+ gint _tmp19_;
+ GVariant* _tmp20_ = NULL;
+ GVariant* _tmp21_;
+ gchar* _tmp22_ = NULL;
+ _tmp12_ = _tmp11_;
+ if (!_tmp12_) {
+ gint _tmp13_;
+ _tmp13_ = i;
+ i = _tmp13_ + 1;
+ }
+ _tmp11_ = FALSE;
+ _tmp14_ = i;
+ _tmp15_ = variant;
+ _tmp16_ = g_variant_n_children (_tmp15_);
+ if (!(((gsize) _tmp14_) < _tmp16_)) {
+ break;
+ }
+ _tmp17_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp17__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp18_ = variant;
+ _tmp19_ = i;
+ _tmp20_ = g_variant_get_child_value (_tmp18_, (gsize) _tmp19_);
+ _tmp21_ = _tmp20_;
+ _tmp22_ = g_variant_dup_string (_tmp21_, NULL);
+ _vala_array_add10 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp22_);
+ _g_variant_unref0 (_tmp21_);
+ }
+ }
+ }
+ }
+ _g_variant_unref0 (variant);
+ }
+ _tmp24_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp24__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ if (_tmp24__length1 == 1) {
+ gchar** _tmp25_;
+ gint _tmp25__length1;
+ const gchar* _tmp26_;
+ _tmp25_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp25__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp26_ = _tmp25_[0];
+ _tmp23_ = g_strcmp0 (_tmp26_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0;
+ } else {
+ _tmp23_ = FALSE;
+ }
+ _tmp27_ = _tmp23_;
+ if (_tmp27_) {
+ const gchar* _tmp28_;
+ gchar* _tmp29_ = NULL;
+ gchar* _tmp30_;
+ gboolean _tmp31_;
+ _tmp28_ = locale;
+ _tmp29_ = string_slice (_tmp28_, (glong) 0, (glong) 2);
+ _tmp30_ = _tmp29_;
+ _tmp31_ = g_strcmp0 (_tmp30_, "ko") == 0;
+ _g_free0 (_tmp30_);
+ if (_tmp31_) {
+ gchar** _tmp32_;
+ gint _tmp32__length1;
+ gchar* _tmp33_;
+ gchar** _tmp34_;
+ gint _tmp34__length1;
+ gchar* _tmp35_;
+ _tmp32_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp32__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp33_ = g_strdup ("Hangul");
+ _vala_array_add11 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp33_);
+ _tmp34_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp34__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ _tmp35_ = g_strdup ("Alt_R");
+ _vala_array_add12 (&self->priv->ACCELERATOR_IME_HOTKEYS, &self->priv->ACCELERATOR_IME_HOTKEYS_length1, &self->priv->_ACCELERATOR_IME_HOTKEYS_size_, _tmp35_);
+ }
+ }
+ _tmp36_ = keybinding_manager_get_instance ();
+ keybinding_manager = _tmp36_;
+ _tmp37_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp37__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gchar** keybinding_collection = NULL;
+ gint keybinding_collection_length1 = 0;
+ gint _keybinding_collection_size_ = 0;
+ gint keybinding_it = 0;
+ keybinding_collection = _tmp37_;
+ keybinding_collection_length1 = _tmp37__length1;
+ for (keybinding_it = 0; keybinding_it < _tmp37__length1; keybinding_it = keybinding_it + 1) {
+ gchar* _tmp38_;
+ gchar* keybinding = NULL;
+ _tmp38_ = g_strdup (keybinding_collection[keybinding_it]);
+ keybinding = _tmp38_;
+ {
+ KeybindingManager* _tmp39_;
+ const gchar* _tmp40_;
+ const gchar* _tmp41_;
+ _tmp39_ = keybinding_manager;
+ _tmp40_ = keybinding;
+ keybinding_manager_bind (_tmp39_, _tmp40_, _____lambda26__keybinding_manager_keybinding_handler_func, self);
+ _tmp41_ = keybinding;
+ if (g_strcmp0 (_tmp41_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0) {
+ KeybindingManager* _tmp42_;
+ _tmp42_ = keybinding_manager;
+ keybinding_manager_bind (_tmp42_, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD, ______lambda27__keybinding_manager_keybinding_handler_func, self);
+ }
+ _g_free0 (keybinding);
+ }
+ }
+ }
+ _g_object_unref0 (keybinding_manager);
+ _g_free0 (locale);
+}
+
+
static void _panel_config_value_changed_cb_ibus_config_value_changed (IBusConfig* _sender, const gchar* section, const gchar* name, GVariant* value, gpointer self) {
panel_config_value_changed_cb (self, _sender, section, name, value);
}
@@ -424,6 +796,7 @@ void panel_set_config (Panel* self, IBus
_tmp4_ = _g_object_ref0 (_tmp3_);
_g_object_unref0 (self->priv->m_config);
self->priv->m_config = _tmp4_;
+ panel_set_keybinding (self);
_tmp5_ = self->priv->m_config;
if (_tmp5_ != NULL) {
IBusConfig* _tmp6_;
@@ -435,6 +808,7 @@ void panel_set_config (Panel* self, IBus
GVariant* _tmp12_;
_tmp6_ = self->priv->m_config;
g_signal_connect_object (_tmp6_, "value-changed", (GCallback) _panel_config_value_changed_cb_ibus_config_value_changed, self, 0);
+ panel_init_engines_order (self);
_tmp7_ = self->priv->m_config;
_tmp8_ = ibus_config_get_value (_tmp7_, "general", "preload_engines");
_tmp9_ = _tmp8_;
@@ -450,7 +824,786 @@ void panel_set_config (Panel* self, IBus
}
-static void _vala_array_add9 (gchar*** array, int* length, int* size, gchar* value) {
+static void panel_gkbdlayout_changed_cb (Panel* self) {
+ GTimer* _tmp0_;
+ gdouble _tmp1_ = 0.0;
+ gdouble elapsed;
+ gboolean _tmp2_ = FALSE;
+ gdouble _tmp3_;
+ gboolean _tmp5_;
+ gint _tmp6_;
+ GTimer* _tmp10_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_changed_layout_timer;
+ _tmp1_ = g_timer_elapsed (_tmp0_, NULL);
+ elapsed = _tmp1_;
+ _tmp3_ = elapsed;
+ if (_tmp3_ < 1.0) {
+ gdouble _tmp4_;
+ _tmp4_ = elapsed;
+ _tmp2_ = _tmp4_ > 0.0;
+ } else {
+ _tmp2_ = FALSE;
+ }
+ _tmp5_ = _tmp2_;
+ if (_tmp5_) {
+ return;
+ }
+ _tmp6_ = self->priv->m_fallback_lock_id;
+ if (_tmp6_ != (-1)) {
+ GkbdLayout* _tmp7_;
+ gint _tmp8_;
+ _tmp7_ = self->priv->m_gkbdlayout;
+ _tmp8_ = self->priv->m_fallback_lock_id;
+ gkbd_layout_lock_group (_tmp7_, _tmp8_);
+ self->priv->m_fallback_lock_id = -1;
+ } else {
+ XKBLayout* _tmp9_;
+ _tmp9_ = self->priv->m_xkblayout;
+ xkb_layout_reset_layout (_tmp9_);
+ }
+ panel_update_xkb_engines (self);
+ _tmp10_ = self->priv->m_changed_layout_timer;
+ g_timer_reset (_tmp10_);
+}
+
+
+static void panel_init_gkbd (Panel* self) {
+ GkbdLayout* _tmp0_;
+ GkbdLayout* _tmp1_;
+ GTimer* _tmp2_;
+ GTimer* _tmp3_;
+ GkbdLayout* _tmp4_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = gkbd_layout_new ();
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ self->priv->m_gkbdlayout = _tmp0_;
+ _tmp1_ = self->priv->m_gkbdlayout;
+ g_signal_connect_object (_tmp1_, "changed", (GCallback) _panel_gkbdlayout_changed_cb_gkbd_layout_changed, self, 0);
+ _tmp2_ = g_timer_new ();
+ _g_timer_destroy0 (self->priv->m_changed_layout_timer);
+ self->priv->m_changed_layout_timer = _tmp2_;
+ _tmp3_ = self->priv->m_changed_layout_timer;
+ g_timer_start (_tmp3_);
+ _tmp4_ = self->priv->m_gkbdlayout;
+ gkbd_layout_start_listen (_tmp4_);
+}
+
+
+static void panel_init_engines_order (Panel* self) {
+ IBusConfig* _tmp0_;
+ IBusConfig* _tmp1_;
+ XKBLayout* _tmp2_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_config;
+ if (_tmp0_ == NULL) {
+ return;
+ }
+ _tmp1_ = self->priv->m_config;
+ _tmp2_ = xkb_layout_new (_tmp1_);
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_xkblayout = _tmp2_;
+ if (HAVE_IBUS_GKBD) {
+ panel_init_gkbd (self);
+ }
+ panel_update_xkb_engines (self);
+}
+
+
+static void _g_free0_ (gpointer var) {
+ var = (g_free (var), NULL);
+}
+
+
+static void _g_list_free__g_free0_ (GList* self) {
+ g_list_foreach (self, (GFunc) _g_free0_, NULL);
+ g_list_free (self);
+}
+
+
+static void _vala_array_add13 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle) {
+ int i;
+ for (i = 0; i < stack_length; i++) {
+ if (g_strcmp0 (stack[i], needle) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
+static void _vala_array_add14 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add15 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void panel_update_xkb_engines (Panel* self) {
+ XKBLayout* _tmp0_;
+ gchar* _tmp1_ = NULL;
+ gchar* var_layout;
+ XKBLayout* _tmp2_;
+ gchar* _tmp3_ = NULL;
+ gchar* var_variant;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ gchar** _tmp6_;
+ gchar** _tmp7_ = NULL;
+ const gchar* _tmp8_;
+ gchar** _tmp9_;
+ gchar** _tmp10_ = NULL;
+ IBusXKBConfigRegistry* _tmp11_;
+ IBusXKBConfigRegistry* _tmp12_;
+ IBusXKBConfigRegistry* registry;
+ gchar** _tmp13_ = NULL;
+ gchar** var_xkb_engine_names;
+ gint var_xkb_engine_names_length1;
+ gint _var_xkb_engine_names_size_;
+ IBusConfig* _tmp65_;
+ GVariant* _tmp66_ = NULL;
+ GVariant* var_engines;
+ gchar** _tmp67_ = NULL;
+ gchar** engine_names;
+ gint engine_names_length1;
+ gint _engine_names_size_;
+ gboolean updated_engine_names;
+ GVariant* _tmp68_;
+ gchar** _tmp72_;
+ gint _tmp72__length1;
+ gboolean _tmp79_;
+ IBusConfig* _tmp84_;
+ GVariant* _tmp85_ = NULL;
+ GVariant* var_order;
+ gchar** _tmp86_ = NULL;
+ gchar** order_names;
+ gint order_names_length1;
+ gint _order_names_size_;
+ gboolean updated_order_names;
+ GVariant* _tmp87_;
+ gchar** _tmp91_;
+ gint _tmp91__length1;
+ gboolean _tmp98_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_xkblayout;
+ _tmp1_ = xkb_layout_get_layout (_tmp0_);
+ var_layout = _tmp1_;
+ _tmp2_ = self->priv->m_xkblayout;
+ _tmp3_ = xkb_layout_get_variant (_tmp2_);
+ var_variant = _tmp3_;
+ _tmp4_ = var_layout;
+ if (g_strcmp0 (_tmp4_, "") == 0) {
+ _g_free0 (var_variant);
+ _g_free0 (var_layout);
+ return;
+ }
+ _tmp5_ = var_layout;
+ _tmp7_ = _tmp6_ = g_strsplit (_tmp5_, ",", 0);
+ self->priv->m_layouts = (_vala_array_free (self->priv->m_layouts, self->priv->m_layouts_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_layouts = _tmp7_;
+ self->priv->m_layouts_length1 = _vala_array_length (_tmp6_);
+ self->priv->_m_layouts_size_ = self->priv->m_layouts_length1;
+ _tmp8_ = var_variant;
+ _tmp10_ = _tmp9_ = g_strsplit (_tmp8_, ",", 0);
+ self->priv->m_variants = (_vala_array_free (self->priv->m_variants, self->priv->m_variants_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_variants = _tmp10_;
+ self->priv->m_variants_length1 = _vala_array_length (_tmp9_);
+ self->priv->_m_variants_size_ = self->priv->m_variants_length1;
+ _tmp11_ = ibus_xkb_config_registry_new ();
+ _tmp12_ = g_object_ref_sink (_tmp11_);
+ registry = _tmp12_;
+ _tmp13_ = g_new0 (gchar*, 0 + 1);
+ var_xkb_engine_names = _tmp13_;
+ var_xkb_engine_names_length1 = 0;
+ _var_xkb_engine_names_size_ = var_xkb_engine_names_length1;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp14_;
+ _tmp14_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp15_;
+ gint _tmp17_;
+ gchar** _tmp18_;
+ gint _tmp18__length1;
+ gchar** _tmp19_;
+ gint _tmp19__length1;
+ gint _tmp20_;
+ const gchar* _tmp21_;
+ gchar* _tmp22_;
+ gchar* name;
+ gchar* lang;
+ gboolean _tmp23_ = FALSE;
+ gint _tmp24_;
+ gchar** _tmp25_;
+ gint _tmp25__length1;
+ gboolean _tmp29_;
+ const gchar* _tmp50_;
+ gchar** _tmp61_;
+ gint _tmp61__length1;
+ const gchar* _tmp62_;
+ const gchar* _tmp63_;
+ gchar* _tmp64_ = NULL;
+ _tmp15_ = _tmp14_;
+ if (!_tmp15_) {
+ gint _tmp16_;
+ _tmp16_ = i;
+ i = _tmp16_ + 1;
+ }
+ _tmp14_ = FALSE;
+ _tmp17_ = i;
+ _tmp18_ = self->priv->m_layouts;
+ _tmp18__length1 = self->priv->m_layouts_length1;
+ if (!(_tmp17_ < _tmp18__length1)) {
+ break;
+ }
+ _tmp19_ = self->priv->m_layouts;
+ _tmp19__length1 = self->priv->m_layouts_length1;
+ _tmp20_ = i;
+ _tmp21_ = _tmp19_[_tmp20_];
+ _tmp22_ = g_strdup (_tmp21_);
+ name = _tmp22_;
+ lang = NULL;
+ _tmp24_ = i;
+ _tmp25_ = self->priv->m_variants;
+ _tmp25__length1 = self->priv->m_variants_length1;
+ if (_tmp24_ < _tmp25__length1) {
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ gint _tmp27_;
+ const gchar* _tmp28_;
+ _tmp26_ = self->priv->m_variants;
+ _tmp26__length1 = self->priv->m_variants_length1;
+ _tmp27_ = i;
+ _tmp28_ = _tmp26_[_tmp27_];
+ _tmp23_ = g_strcmp0 (_tmp28_, "") != 0;
+ } else {
+ _tmp23_ = FALSE;
+ }
+ _tmp29_ = _tmp23_;
+ if (_tmp29_) {
+ const gchar* _tmp30_;
+ gchar** _tmp31_;
+ gint _tmp31__length1;
+ gint _tmp32_;
+ const gchar* _tmp33_;
+ gchar* _tmp34_ = NULL;
+ const gchar* _tmp35_;
+ gchar** _tmp36_;
+ gint _tmp36__length1;
+ gint _tmp37_;
+ const gchar* _tmp38_;
+ gchar* _tmp39_ = NULL;
+ gchar* layout;
+ IBusXKBConfigRegistry* _tmp40_;
+ const gchar* _tmp41_;
+ GList* _tmp42_ = NULL;
+ GList* langs;
+ GList* _tmp43_;
+ guint _tmp44_ = 0U;
+ _tmp30_ = name;
+ _tmp31_ = self->priv->m_variants;
+ _tmp31__length1 = self->priv->m_variants_length1;
+ _tmp32_ = i;
+ _tmp33_ = _tmp31_[_tmp32_];
+ _tmp34_ = g_strdup_printf ("%s:%s", _tmp30_, _tmp33_);
+ _g_free0 (name);
+ name = _tmp34_;
+ _tmp35_ = name;
+ _tmp36_ = self->priv->m_variants;
+ _tmp36__length1 = self->priv->m_variants_length1;
+ _tmp37_ = i;
+ _tmp38_ = _tmp36_[_tmp37_];
+ _tmp39_ = g_strdup_printf ("%s(%s)", _tmp35_, _tmp38_);
+ layout = _tmp39_;
+ _tmp40_ = registry;
+ _tmp41_ = layout;
+ _tmp42_ = ibus_xkb_config_registry_layout_lang_get_langs (_tmp40_, _tmp41_);
+ langs = _tmp42_;
+ _tmp43_ = langs;
+ _tmp44_ = g_list_length (_tmp43_);
+ if (_tmp44_ != ((guint) 0)) {
+ GList* _tmp45_;
+ gconstpointer _tmp46_;
+ gchar* _tmp47_;
+ _tmp45_ = langs;
+ _tmp46_ = _tmp45_->data;
+ _tmp47_ = g_strdup ((const gchar*) _tmp46_);
+ _g_free0 (lang);
+ lang = _tmp47_;
+ }
+ __g_list_free__g_free0_0 (langs);
+ _g_free0 (layout);
+ } else {
+ const gchar* _tmp48_;
+ gchar* _tmp49_ = NULL;
+ _tmp48_ = name;
+ _tmp49_ = g_strdup_printf ("%s:", _tmp48_);
+ _g_free0 (name);
+ name = _tmp49_;
+ }
+ _tmp50_ = lang;
+ if (_tmp50_ == NULL) {
+ IBusXKBConfigRegistry* _tmp51_;
+ gchar** _tmp52_;
+ gint _tmp52__length1;
+ gint _tmp53_;
+ const gchar* _tmp54_;
+ GList* _tmp55_ = NULL;
+ GList* langs;
+ GList* _tmp56_;
+ guint _tmp57_ = 0U;
+ _tmp51_ = registry;
+ _tmp52_ = self->priv->m_layouts;
+ _tmp52__length1 = self->priv->m_layouts_length1;
+ _tmp53_ = i;
+ _tmp54_ = _tmp52_[_tmp53_];
+ _tmp55_ = ibus_xkb_config_registry_layout_lang_get_langs (_tmp51_, _tmp54_);
+ langs = _tmp55_;
+ _tmp56_ = langs;
+ _tmp57_ = g_list_length (_tmp56_);
+ if (_tmp57_ != ((guint) 0)) {
+ GList* _tmp58_;
+ gconstpointer _tmp59_;
+ gchar* _tmp60_;
+ _tmp58_ = langs;
+ _tmp59_ = _tmp58_->data;
+ _tmp60_ = g_strdup ((const gchar*) _tmp59_);
+ _g_free0 (lang);
+ lang = _tmp60_;
+ }
+ __g_list_free__g_free0_0 (langs);
+ }
+ _tmp61_ = var_xkb_engine_names;
+ _tmp61__length1 = var_xkb_engine_names_length1;
+ _tmp62_ = name;
+ _tmp63_ = lang;
+ _tmp64_ = g_strdup_printf ("%s:%s:%s", "xkb", _tmp62_, _tmp63_);
+ _vala_array_add13 (&var_xkb_engine_names, &var_xkb_engine_names_length1, &_var_xkb_engine_names_size_, _tmp64_);
+ _g_free0 (lang);
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp65_ = self->priv->m_config;
+ _tmp66_ = ibus_config_get_value (_tmp65_, "general", "preload_engines");
+ var_engines = _tmp66_;
+ _tmp67_ = g_new0 (gchar*, 0 + 1);
+ engine_names = _tmp67_;
+ engine_names_length1 = 0;
+ _engine_names_size_ = engine_names_length1;
+ updated_engine_names = FALSE;
+ _tmp68_ = var_engines;
+ if (_tmp68_ != NULL) {
+ GVariant* _tmp69_;
+ size_t _tmp70_;
+ gchar** _tmp71_ = NULL;
+ _tmp69_ = var_engines;
+ _tmp71_ = g_variant_dup_strv (_tmp69_, &_tmp70_);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ engine_names = _tmp71_;
+ engine_names_length1 = _tmp70_;
+ _engine_names_size_ = engine_names_length1;
+ }
+ _tmp72_ = var_xkb_engine_names;
+ _tmp72__length1 = var_xkb_engine_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp72_;
+ name_collection_length1 = _tmp72__length1;
+ for (name_it = 0; name_it < _tmp72__length1; name_it = name_it + 1) {
+ gchar* _tmp73_;
+ gchar* name = NULL;
+ _tmp73_ = g_strdup (name_collection[name_it]);
+ name = _tmp73_;
+ {
+ const gchar* _tmp74_;
+ gchar** _tmp75_;
+ gint _tmp75__length1;
+ gchar** _tmp76_;
+ gint _tmp76__length1;
+ const gchar* _tmp77_;
+ gchar* _tmp78_;
+ _tmp74_ = name;
+ _tmp75_ = engine_names;
+ _tmp75__length1 = engine_names_length1;
+ if (_vala_string_array_contains (_tmp75_, _tmp75__length1, _tmp74_)) {
+ _g_free0 (name);
+ continue;
+ }
+ updated_engine_names = TRUE;
+ _tmp76_ = engine_names;
+ _tmp76__length1 = engine_names_length1;
+ _tmp77_ = name;
+ _tmp78_ = g_strdup (_tmp77_);
+ _vala_array_add14 (&engine_names, &engine_names_length1, &_engine_names_size_, _tmp78_);
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp79_ = updated_engine_names;
+ if (_tmp79_) {
+ IBusConfig* _tmp80_;
+ gchar** _tmp81_;
+ gint _tmp81__length1;
+ GVariant* _tmp82_;
+ GVariant* _tmp83_;
+ _tmp80_ = self->priv->m_config;
+ _tmp81_ = engine_names;
+ _tmp81__length1 = engine_names_length1;
+ _tmp82_ = g_variant_new_strv (_tmp81_, _tmp81__length1);
+ _tmp83_ = g_variant_ref_sink (_tmp82_);
+ ibus_config_set_value (_tmp80_, "general", "preload_engines", _tmp83_);
+ _g_variant_unref0 (_tmp83_);
+ }
+ _tmp84_ = self->priv->m_config;
+ _tmp85_ = ibus_config_get_value (_tmp84_, "general", "engines_order");
+ var_order = _tmp85_;
+ _tmp86_ = g_new0 (gchar*, 0 + 1);
+ order_names = _tmp86_;
+ order_names_length1 = 0;
+ _order_names_size_ = order_names_length1;
+ updated_order_names = FALSE;
+ _tmp87_ = var_order;
+ if (_tmp87_ != NULL) {
+ GVariant* _tmp88_;
+ size_t _tmp89_;
+ gchar** _tmp90_ = NULL;
+ _tmp88_ = var_order;
+ _tmp90_ = g_variant_dup_strv (_tmp88_, &_tmp89_);
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ order_names = _tmp90_;
+ order_names_length1 = _tmp89_;
+ _order_names_size_ = order_names_length1;
+ }
+ _tmp91_ = var_xkb_engine_names;
+ _tmp91__length1 = var_xkb_engine_names_length1;
+ {
+ gchar** name_collection = NULL;
+ gint name_collection_length1 = 0;
+ gint _name_collection_size_ = 0;
+ gint name_it = 0;
+ name_collection = _tmp91_;
+ name_collection_length1 = _tmp91__length1;
+ for (name_it = 0; name_it < _tmp91__length1; name_it = name_it + 1) {
+ gchar* _tmp92_;
+ gchar* name = NULL;
+ _tmp92_ = g_strdup (name_collection[name_it]);
+ name = _tmp92_;
+ {
+ const gchar* _tmp93_;
+ gchar** _tmp94_;
+ gint _tmp94__length1;
+ gchar** _tmp95_;
+ gint _tmp95__length1;
+ const gchar* _tmp96_;
+ gchar* _tmp97_;
+ _tmp93_ = name;
+ _tmp94_ = order_names;
+ _tmp94__length1 = order_names_length1;
+ if (_vala_string_array_contains (_tmp94_, _tmp94__length1, _tmp93_)) {
+ _g_free0 (name);
+ continue;
+ }
+ _tmp95_ = order_names;
+ _tmp95__length1 = order_names_length1;
+ _tmp96_ = name;
+ _tmp97_ = g_strdup (_tmp96_);
+ _vala_array_add15 (&order_names, &order_names_length1, &_order_names_size_, _tmp97_);
+ updated_order_names = TRUE;
+ _g_free0 (name);
+ }
+ }
+ }
+ _tmp98_ = updated_order_names;
+ if (_tmp98_) {
+ IBusConfig* _tmp99_;
+ gchar** _tmp100_;
+ gint _tmp100__length1;
+ GVariant* _tmp101_;
+ GVariant* _tmp102_;
+ _tmp99_ = self->priv->m_config;
+ _tmp100_ = order_names;
+ _tmp100__length1 = order_names_length1;
+ _tmp101_ = g_variant_new_strv (_tmp100_, _tmp100__length1);
+ _tmp102_ = g_variant_ref_sink (_tmp101_);
+ ibus_config_set_value (_tmp99_, "general", "engines_order", _tmp102_);
+ _g_variant_unref0 (_tmp102_);
+ }
+ order_names = (_vala_array_free (order_names, order_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_variant_unref0 (var_order);
+ engine_names = (_vala_array_free (engine_names, engine_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_variant_unref0 (var_engines);
+ var_xkb_engine_names = (_vala_array_free (var_xkb_engine_names, var_xkb_engine_names_length1, (GDestroyNotify) g_free), NULL);
+ _g_object_unref0 (registry);
+ _g_free0 (var_variant);
+ _g_free0 (var_layout);
+}
+
+
+static void panel_set_xkb_group_layout (Panel* self, const gchar* layout) {
+ XKBLayout* _tmp0_;
+ const gchar* _tmp1_;
+ gint _tmp2_ = 0;
+ gint* _tmp3_ = NULL;
+ gint* retval;
+ gint retval_length1;
+ gint _retval_size_;
+ gint* _tmp4_;
+ gint _tmp4__length1;
+ gint _tmp5_;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (layout != NULL);
+ _tmp0_ = self->priv->m_xkblayout;
+ _tmp1_ = layout;
+ _tmp3_ = xkb_layout_set_layout (_tmp0_, _tmp1_, "default", "default", &_tmp2_);
+ retval = _tmp3_;
+ retval_length1 = _tmp2_;
+ _retval_size_ = retval_length1;
+ _tmp4_ = retval;
+ _tmp4__length1 = retval_length1;
+ _tmp5_ = _tmp4_[0];
+ if (_tmp5_ >= 0) {
+ gint* _tmp6_;
+ gint _tmp6__length1;
+ gint _tmp7_;
+ gboolean _tmp8_ = FALSE;
+ gint* _tmp9_;
+ gint _tmp9__length1;
+ gint _tmp10_;
+ gboolean _tmp11_;
+ _tmp6_ = retval;
+ _tmp6__length1 = retval_length1;
+ _tmp7_ = _tmp6_[0];
+ self->priv->m_fallback_lock_id = _tmp7_;
+ _tmp9_ = retval;
+ _tmp9__length1 = retval_length1;
+ _tmp10_ = _tmp9_[1];
+ if (_tmp10_ != 0) {
+ _tmp8_ = TRUE;
+ } else {
+ _tmp8_ = FALSE;
+ }
+ _tmp11_ = _tmp8_;
+ self->priv->m_changed_xkb_option = _tmp11_;
+ }
+ retval = (g_free (retval), NULL);
+}
+
+
+static gboolean panel_set_gkbd_layout (Panel* self, const gchar* layout) {
+ gboolean result = FALSE;
+ gboolean _tmp0_;
+ GkbdLayout* _tmp1_;
+ gint _tmp2_ = 0;
+ gchar** _tmp3_ = NULL;
+ gchar** _tmp4_;
+ gint _tmp4__length1;
+ gint _tmp5_;
+ gint gkbd_len;
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (layout != NULL, FALSE);
+ _tmp0_ = self->priv->m_changed_xkb_option;
+ if (_tmp0_ == TRUE) {
+ self->priv->m_changed_xkb_option = FALSE;
+ result = FALSE;
+ return result;
+ }
+ _tmp1_ = self->priv->m_gkbdlayout;
+ _tmp3_ = gkbd_layout_get_group_names (_tmp1_, &_tmp2_);
+ _tmp4_ = _tmp3_;
+ _tmp4__length1 = _tmp2_;
+ _tmp5_ = _tmp2_;
+ _tmp4_ = (_vala_array_free (_tmp4_, _tmp4__length1, (GDestroyNotify) g_free), NULL);
+ gkbd_len = _tmp5_;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp6_;
+ _tmp6_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp7_;
+ gboolean _tmp9_ = FALSE;
+ gint _tmp10_;
+ gchar** _tmp11_;
+ gint _tmp11__length1;
+ gboolean _tmp14_;
+ gchar** _tmp15_;
+ gint _tmp15__length1;
+ gint _tmp16_;
+ const gchar* _tmp17_;
+ gchar* _tmp18_;
+ gchar* sys_layout;
+ gboolean _tmp19_ = FALSE;
+ gint _tmp20_;
+ gchar** _tmp21_;
+ gint _tmp21__length1;
+ gboolean _tmp25_;
+ const gchar* _tmp31_;
+ const gchar* _tmp32_;
+ _tmp7_ = _tmp6_;
+ if (!_tmp7_) {
+ gint _tmp8_;
+ _tmp8_ = i;
+ i = _tmp8_ + 1;
+ }
+ _tmp6_ = FALSE;
+ _tmp10_ = i;
+ _tmp11_ = self->priv->m_layouts;
+ _tmp11__length1 = self->priv->m_layouts_length1;
+ if (_tmp10_ < _tmp11__length1) {
+ gint _tmp12_;
+ gint _tmp13_;
+ _tmp12_ = i;
+ _tmp13_ = gkbd_len;
+ _tmp9_ = _tmp12_ < _tmp13_;
+ } else {
+ _tmp9_ = FALSE;
+ }
+ _tmp14_ = _tmp9_;
+ if (!_tmp14_) {
+ break;
+ }
+ _tmp15_ = self->priv->m_layouts;
+ _tmp15__length1 = self->priv->m_layouts_length1;
+ _tmp16_ = i;
+ _tmp17_ = _tmp15_[_tmp16_];
+ _tmp18_ = g_strdup (_tmp17_);
+ sys_layout = _tmp18_;
+ _tmp20_ = i;
+ _tmp21_ = self->priv->m_variants;
+ _tmp21__length1 = self->priv->m_variants_length1;
+ if (_tmp20_ < _tmp21__length1) {
+ gchar** _tmp22_;
+ gint _tmp22__length1;
+ gint _tmp23_;
+ const gchar* _tmp24_;
+ _tmp22_ = self->priv->m_variants;
+ _tmp22__length1 = self->priv->m_variants_length1;
+ _tmp23_ = i;
+ _tmp24_ = _tmp22_[_tmp23_];
+ _tmp19_ = g_strcmp0 (_tmp24_, "") != 0;
+ } else {
+ _tmp19_ = FALSE;
+ }
+ _tmp25_ = _tmp19_;
+ if (_tmp25_) {
+ const gchar* _tmp26_;
+ gchar** _tmp27_;
+ gint _tmp27__length1;
+ gint _tmp28_;
+ const gchar* _tmp29_;
+ gchar* _tmp30_ = NULL;
+ _tmp26_ = sys_layout;
+ _tmp27_ = self->priv->m_variants;
+ _tmp27__length1 = self->priv->m_variants_length1;
+ _tmp28_ = i;
+ _tmp29_ = _tmp27_[_tmp28_];
+ _tmp30_ = g_strdup_printf ("%s(%s)", _tmp26_, _tmp29_);
+ _g_free0 (sys_layout);
+ sys_layout = _tmp30_;
+ }
+ _tmp31_ = sys_layout;
+ _tmp32_ = layout;
+ if (g_strcmp0 (_tmp31_, _tmp32_) == 0) {
+ GkbdLayout* _tmp33_;
+ gint _tmp34_;
+ _tmp33_ = self->priv->m_gkbdlayout;
+ _tmp34_ = i;
+ gkbd_layout_lock_group (_tmp33_, _tmp34_);
+ result = TRUE;
+ _g_free0 (sys_layout);
+ return result;
+ }
+ _g_free0 (sys_layout);
+ }
+ }
+ }
+ result = FALSE;
+ return result;
+}
+
+
+static void panel_set_layout (Panel* self, const gchar* layout) {
+ gboolean _tmp0_ = FALSE;
+ const gchar* _tmp1_;
+ gboolean _tmp3_;
+ XKBLayout* _tmp4_;
+ XKBLayout* _tmp8_;
+ const gchar* _tmp9_;
+ gint _tmp10_ = 0;
+ gint* _tmp11_ = NULL;
+ gint* _tmp12_;
+ gint _tmp12__length1;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (layout != NULL);
+ _tmp1_ = layout;
+ if (g_strcmp0 (_tmp1_, "default") == 0) {
+ _tmp0_ = TRUE;
+ } else {
+ const gchar* _tmp2_;
+ _tmp2_ = layout;
+ _tmp0_ = _tmp2_ == NULL;
+ }
+ _tmp3_ = _tmp0_;
+ if (_tmp3_) {
+ return;
+ }
+ _tmp4_ = self->priv->m_xkblayout;
+ if (_tmp4_ == NULL) {
+ panel_init_engines_order (self);
+ }
+ if (HAVE_IBUS_GKBD) {
+ const gchar* _tmp5_;
+ gboolean _tmp6_ = FALSE;
+ const gchar* _tmp7_;
+ _tmp5_ = layout;
+ _tmp6_ = panel_set_gkbd_layout (self, _tmp5_);
+ if (_tmp6_) {
+ return;
+ }
+ _tmp7_ = layout;
+ panel_set_xkb_group_layout (self, _tmp7_);
+ return;
+ }
+ _tmp8_ = self->priv->m_xkblayout;
+ _tmp9_ = layout;
+ _tmp11_ = xkb_layout_set_layout (_tmp8_, _tmp9_, "default", "default", &_tmp10_);
+ _tmp12_ = _tmp11_;
+ _tmp12__length1 = _tmp10_;
+ _tmp12_ = (g_free (_tmp12_), NULL);
+}
+
+
+static void _vala_array_add16 (gchar*** array, int* length, int* size, gchar* value) {
if ((*length) == (*size)) {
*size = (*size) ? (2 * (*size)) : 4;
*array = g_renew (gchar*, *array, (*size) + 1);
@@ -484,16 +1637,13 @@ static void panel_switch_engine (Panel*
gboolean _tmp32_ = FALSE;
IBusEngineDesc* _tmp35_;
const gchar* _tmp36_ = NULL;
- gchar* _tmp37_ = NULL;
- gchar* cmdline;
- gchar** _tmp43_ = NULL;
+ gchar** _tmp37_ = NULL;
gchar** names;
gint names_length1;
gint _names_size_;
- IBusEngineDesc** _tmp44_;
- gint _tmp44__length1;
- IBusConfig* _tmp50_;
- GError * _inner_error_ = NULL;
+ IBusEngineDesc** _tmp38_;
+ gint _tmp38__length1;
+ IBusConfig* _tmp44_;
g_return_if_fail (self != NULL);
_tmp1_ = i;
if (_tmp1_ >= 0) {
@@ -588,107 +1738,63 @@ static void panel_switch_engine (Panel*
const gchar* _tmp34_ = NULL;
_tmp33_ = engine;
_tmp34_ = ibus_engine_desc_get_name (_tmp33_);
- g_warning ("panel.vala:120: Switch engine to %s failed.", _tmp34_);
+ g_warning ("panel.vala:367: Switch engine to %s failed.", _tmp34_);
_g_object_unref0 (engine);
return;
}
_tmp35_ = engine;
_tmp36_ = ibus_engine_desc_get_layout (_tmp35_);
- _tmp37_ = g_strdup_printf ("setxkbmap %s", _tmp36_);
- cmdline = _tmp37_;
- {
- const gchar* _tmp38_;
- gboolean _tmp39_ = FALSE;
- gboolean _tmp40_;
- _tmp38_ = cmdline;
- _tmp39_ = g_spawn_command_line_sync (_tmp38_, NULL, NULL, NULL, &_inner_error_);
- _tmp40_ = _tmp39_;
- if (_inner_error_ != NULL) {
- if (_inner_error_->domain == G_SPAWN_ERROR) {
- goto __catch2_g_spawn_error;
- }
- _g_free0 (cmdline);
- _g_object_unref0 (engine);
- g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
- g_clear_error (&_inner_error_);
- return;
- }
- if (!_tmp40_) {
- IBusEngineDesc* _tmp41_;
- const gchar* _tmp42_ = NULL;
- _tmp41_ = engine;
- _tmp42_ = ibus_engine_desc_get_layout (_tmp41_);
- g_warning ("panel.vala:127: Switch xkb layout to %s failed.", _tmp42_);
- }
- }
- goto __finally2;
- __catch2_g_spawn_error:
- {
- GError* e = NULL;
- e = _inner_error_;
- _inner_error_ = NULL;
- g_warning ("panel.vala:131: execute setxkblayout failed");
- _g_error_free0 (e);
- }
- __finally2:
- if (_inner_error_ != NULL) {
- _g_free0 (cmdline);
- _g_object_unref0 (engine);
- g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
- g_clear_error (&_inner_error_);
- return;
- }
- _tmp43_ = g_new0 (gchar*, 0 + 1);
- names = _tmp43_;
+ panel_set_layout (self, _tmp36_);
+ _tmp37_ = g_new0 (gchar*, 0 + 1);
+ names = _tmp37_;
names_length1 = 0;
_names_size_ = names_length1;
- _tmp44_ = self->priv->m_engines;
- _tmp44__length1 = self->priv->m_engines_length1;
+ _tmp38_ = self->priv->m_engines;
+ _tmp38__length1 = self->priv->m_engines_length1;
{
IBusEngineDesc** desc_collection = NULL;
gint desc_collection_length1 = 0;
gint _desc_collection_size_ = 0;
gint desc_it = 0;
- desc_collection = _tmp44_;
- desc_collection_length1 = _tmp44__length1;
- for (desc_it = 0; desc_it < _tmp44__length1; desc_it = desc_it + 1) {
- IBusEngineDesc* _tmp45_;
+ desc_collection = _tmp38_;
+ desc_collection_length1 = _tmp38__length1;
+ for (desc_it = 0; desc_it < _tmp38__length1; desc_it = desc_it + 1) {
+ IBusEngineDesc* _tmp39_;
IBusEngineDesc* desc = NULL;
- _tmp45_ = _g_object_ref0 (desc_collection[desc_it]);
- desc = _tmp45_;
+ _tmp39_ = _g_object_ref0 (desc_collection[desc_it]);
+ desc = _tmp39_;
{
- gchar** _tmp46_;
- gint _tmp46__length1;
- IBusEngineDesc* _tmp47_;
- const gchar* _tmp48_ = NULL;
- gchar* _tmp49_;
- _tmp46_ = names;
- _tmp46__length1 = names_length1;
- _tmp47_ = desc;
- _tmp48_ = ibus_engine_desc_get_name (_tmp47_);
- _tmp49_ = g_strdup (_tmp48_);
- _vala_array_add9 (&names, &names_length1, &_names_size_, _tmp49_);
+ gchar** _tmp40_;
+ gint _tmp40__length1;
+ IBusEngineDesc* _tmp41_;
+ const gchar* _tmp42_ = NULL;
+ gchar* _tmp43_;
+ _tmp40_ = names;
+ _tmp40__length1 = names_length1;
+ _tmp41_ = desc;
+ _tmp42_ = ibus_engine_desc_get_name (_tmp41_);
+ _tmp43_ = g_strdup (_tmp42_);
+ _vala_array_add16 (&names, &names_length1, &_names_size_, _tmp43_);
_g_object_unref0 (desc);
}
}
}
- _tmp50_ = self->priv->m_config;
- if (_tmp50_ != NULL) {
- IBusConfig* _tmp51_;
- gchar** _tmp52_;
- gint _tmp52__length1;
- GVariant* _tmp53_;
- GVariant* _tmp54_;
- _tmp51_ = self->priv->m_config;
- _tmp52_ = names;
- _tmp52__length1 = names_length1;
- _tmp53_ = g_variant_new_strv (_tmp52_, _tmp52__length1);
- _tmp54_ = g_variant_ref_sink (_tmp53_);
- ibus_config_set_value (_tmp51_, "general", "engines_order", _tmp54_);
- _g_variant_unref0 (_tmp54_);
+ _tmp44_ = self->priv->m_config;
+ if (_tmp44_ != NULL) {
+ IBusConfig* _tmp45_;
+ gchar** _tmp46_;
+ gint _tmp46__length1;
+ GVariant* _tmp47_;
+ GVariant* _tmp48_;
+ _tmp45_ = self->priv->m_config;
+ _tmp46_ = names;
+ _tmp46__length1 = names_length1;
+ _tmp47_ = g_variant_new_strv (_tmp46_, _tmp46__length1);
+ _tmp48_ = g_variant_ref_sink (_tmp47_);
+ ibus_config_set_value (_tmp45_, "general", "engines_order", _tmp48_);
+ _g_variant_unref0 (_tmp48_);
}
names = (_vala_array_free (names, names_length1, (GDestroyNotify) g_free), NULL);
- _g_free0 (cmdline);
_g_object_unref0 (engine);
}
@@ -782,7 +1888,7 @@ static void panel_handle_engine_switch (
i = _tmp17_;
_tmp18_ = i;
if (_tmp18_ < 0) {
- g_debug ("panel.vala:167: switch cancelled");
+ g_debug ("panel.vala:406: switch cancelled");
} else {
gint _tmp19_;
IBusEngineDesc** _tmp20_;
@@ -819,7 +1925,7 @@ static void panel_handle_engine_switch (
}
-static gchar** _vala_array_dup2 (gchar** self, int length) {
+static gchar** _vala_array_dup4 (gchar** self, int length) {
gchar** result;
int i;
result = g_new0 (gchar*, length + 1);
@@ -832,18 +1938,7 @@ static gchar** _vala_array_dup2 (gchar**
}
-static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle) {
- int i;
- for (i = 0; i < stack_length; i++) {
- if (g_strcmp0 (stack[i], needle) == 0) {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-
-static void _vala_array_add10 (gchar*** array, int* length, int* size, gchar* value) {
+static void _vala_array_add17 (gchar*** array, int* length, int* size, gchar* value) {
if ((*length) == (*size)) {
*size = (*size) ? (2 * (*size)) : 4;
*array = g_renew (gchar*, *array, (*size) + 1);
@@ -853,7 +1948,7 @@ static void _vala_array_add10 (gchar***
}
-static void _vala_array_add11 (gchar*** array, int* length, int* size, gchar* value) {
+static void _vala_array_add18 (gchar*** array, int* length, int* size, gchar* value) {
if ((*length) == (*size)) {
*size = (*size) ? (2 * (*size)) : 4;
*array = g_renew (gchar*, *array, (*size) + 1);
@@ -863,7 +1958,7 @@ static void _vala_array_add11 (gchar***
}
-static IBusEngineDesc** _vala_array_dup3 (IBusEngineDesc** self, int length) {
+static IBusEngineDesc** _vala_array_dup5 (IBusEngineDesc** self, int length) {
IBusEngineDesc** result;
int i;
result = g_new0 (IBusEngineDesc*, length + 1);
@@ -876,7 +1971,7 @@ static IBusEngineDesc** _vala_array_dup3
}
-static IBusEngineDesc** _vala_array_dup4 (IBusEngineDesc** self, int length) {
+static IBusEngineDesc** _vala_array_dup6 (IBusEngineDesc** self, int length) {
IBusEngineDesc** result;
int i;
result = g_new0 (IBusEngineDesc*, length + 1);
@@ -985,7 +2080,7 @@ static void panel_update_engines (Panel*
}
_tmp15_ = _tmp10_;
_tmp15__length1 = _tmp10__length1;
- _tmp16_ = (_tmp15_ != NULL) ? _vala_array_dup2 (_tmp15_, _tmp15__length1) : ((gpointer) _tmp15_);
+ _tmp16_ = (_tmp15_ != NULL) ? _vala_array_dup4 (_tmp15_, _tmp15__length1) : ((gpointer) _tmp15_);
_tmp16__length1 = _tmp15__length1;
order_names = _tmp16_;
order_names_length1 = _tmp16__length1;
@@ -1024,7 +2119,7 @@ static void panel_update_engines (Panel*
_tmp22__length1 = names_length1;
_tmp23_ = name;
_tmp24_ = g_strdup (_tmp23_);
- _vala_array_add10 (&names, &names_length1, &_names_size_, _tmp24_);
+ _vala_array_add17 (&names, &names_length1, &_names_size_, _tmp24_);
}
_g_free0 (name);
}
@@ -1063,7 +2158,7 @@ static void panel_update_engines (Panel*
_tmp29__length1 = names_length1;
_tmp30_ = name;
_tmp31_ = g_strdup (_tmp30_);
- _vala_array_add11 (&names, &names_length1, &_names_size_, _tmp31_);
+ _vala_array_add18 (&names, &names_length1, &_names_size_, _tmp31_);
_g_free0 (name);
}
}
@@ -1084,7 +2179,7 @@ static void panel_update_engines (Panel*
gint _tmp38__length1;
_tmp37_ = engines;
_tmp37__length1 = engines_length1;
- _tmp38_ = (_tmp37_ != NULL) ? _vala_array_dup3 (_tmp37_, _tmp37__length1) : ((gpointer) _tmp37_);
+ _tmp38_ = (_tmp37_ != NULL) ? _vala_array_dup5 (_tmp37_, _tmp37__length1) : ((gpointer) _tmp37_);
_tmp38__length1 = _tmp37__length1;
self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
self->priv->m_engines = _tmp38_;
@@ -1109,7 +2204,7 @@ static void panel_update_engines (Panel*
current_engine = _tmp41_;
_tmp42_ = engines;
_tmp42__length1 = engines_length1;
- _tmp43_ = (_tmp42_ != NULL) ? _vala_array_dup4 (_tmp42_, _tmp42__length1) : ((gpointer) _tmp42_);
+ _tmp43_ = (_tmp42_ != NULL) ? _vala_array_dup6 (_tmp42_, _tmp42__length1) : ((gpointer) _tmp42_);
_tmp43__length1 = _tmp42__length1;
self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
self->priv->m_engines = _tmp43_;
@@ -1237,7 +2332,7 @@ static void panel_show_setup_dialog (Pan
_tmp8_ = (_vala_array_free (_tmp8_, _tmp8__length1, (GDestroyNotify) g_free), NULL);
if (_inner_error_ != NULL) {
if (_inner_error_->domain == G_SPAWN_ERROR) {
- goto __catch3_g_spawn_error;
+ goto __catch2_g_spawn_error;
}
_g_free0 (binary);
g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
@@ -1245,8 +2340,8 @@ static void panel_show_setup_dialog (Pan
return;
}
}
- goto __finally3;
- __catch3_g_spawn_error:
+ goto __finally2;
+ __catch2_g_spawn_error:
{
GError* e = NULL;
const gchar* _tmp10_;
@@ -1257,11 +2352,11 @@ static void panel_show_setup_dialog (Pan
_tmp10_ = binary;
_tmp11_ = e;
_tmp12_ = _tmp11_->message;
- g_warning ("panel.vala:239: Execute %s failed! %s", _tmp10_, _tmp12_);
+ g_warning ("panel.vala:478: Execute %s failed! %s", _tmp10_, _tmp12_);
self->priv->m_setup_pid = (GPid) 0;
_g_error_free0 (e);
}
- __finally3:
+ __finally2:
if (_inner_error_ != NULL) {
_g_free0 (binary);
g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
@@ -1950,12 +3045,31 @@ static void panel_class_init (PanelClass
static void panel_instance_init (Panel * self) {
IBusEngineDesc** _tmp0_ = NULL;
+ gchar** _tmp1_ = NULL;
+ gchar** _tmp2_ = NULL;
+ gchar** _tmp3_ = NULL;
self->priv = PANEL_GET_PRIVATE (self);
_tmp0_ = g_new0 (IBusEngineDesc*, 0 + 1);
self->priv->m_engines = _tmp0_;
self->priv->m_engines_length1 = 0;
self->priv->_m_engines_size_ = self->priv->m_engines_length1;
self->priv->m_setup_pid = (GPid) 0;
+ self->priv->m_gkbdlayout = NULL;
+ self->priv->m_xkblayout = NULL;
+ _tmp1_ = g_new0 (gchar*, 0 + 1);
+ self->priv->m_layouts = _tmp1_;
+ self->priv->m_layouts_length1 = 0;
+ self->priv->_m_layouts_size_ = self->priv->m_layouts_length1;
+ _tmp2_ = g_new0 (gchar*, 0 + 1);
+ self->priv->m_variants = _tmp2_;
+ self->priv->m_variants_length1 = 0;
+ self->priv->_m_variants_size_ = self->priv->m_variants_length1;
+ self->priv->m_fallback_lock_id = -1;
+ self->priv->m_changed_xkb_option = FALSE;
+ _tmp3_ = g_new0 (gchar*, 0 + 1);
+ self->priv->ACCELERATOR_IME_HOTKEYS = _tmp3_;
+ self->priv->ACCELERATOR_IME_HOTKEYS_length1 = 0;
+ self->priv->_ACCELERATOR_IME_HOTKEYS_size_ = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
}
@@ -1963,15 +3077,66 @@ static void panel_finalize (GObject* obj
Panel * self;
KeybindingManager* _tmp0_ = NULL;
KeybindingManager* keybinding_manager;
- KeybindingManager* _tmp1_;
- KeybindingManager* _tmp2_;
+ gchar** _tmp1_;
+ gint _tmp1__length1;
+ gboolean _tmp7_ = FALSE;
+ gboolean _tmp9_;
self = PANEL (obj);
_tmp0_ = keybinding_manager_get_instance ();
keybinding_manager = _tmp0_;
- _tmp1_ = keybinding_manager;
- keybinding_manager_unbind (_tmp1_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD);
- _tmp2_ = keybinding_manager;
- keybinding_manager_unbind (_tmp2_, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD);
+ _tmp1_ = self->priv->ACCELERATOR_IME_HOTKEYS;
+ _tmp1__length1 = self->priv->ACCELERATOR_IME_HOTKEYS_length1;
+ {
+ gchar** keybinding_collection = NULL;
+ gint keybinding_collection_length1 = 0;
+ gint _keybinding_collection_size_ = 0;
+ gint keybinding_it = 0;
+ keybinding_collection = _tmp1_;
+ keybinding_collection_length1 = _tmp1__length1;
+ for (keybinding_it = 0; keybinding_it < _tmp1__length1; keybinding_it = keybinding_it + 1) {
+ gchar* _tmp2_;
+ gchar* keybinding = NULL;
+ _tmp2_ = g_strdup (keybinding_collection[keybinding_it]);
+ keybinding = _tmp2_;
+ {
+ KeybindingManager* _tmp3_;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ _tmp3_ = keybinding_manager;
+ _tmp4_ = keybinding;
+ keybinding_manager_unbind (_tmp3_, _tmp4_);
+ _tmp5_ = keybinding;
+ if (g_strcmp0 (_tmp5_, PANEL_ACCELERATOR_SWITCH_IME_FOREWARD) == 0) {
+ KeybindingManager* _tmp6_;
+ _tmp6_ = keybinding_manager;
+ keybinding_manager_unbind (_tmp6_, PANEL_ACCELERATOR_SWITCH_IME_BACKWARD);
+ }
+ _g_free0 (keybinding);
+ }
+ }
+ }
+ if (HAVE_IBUS_GKBD) {
+ GkbdLayout* _tmp8_;
+ _tmp8_ = self->priv->m_gkbdlayout;
+ _tmp7_ = _tmp8_ != NULL;
+ } else {
+ _tmp7_ = FALSE;
+ }
+ _tmp9_ = _tmp7_;
+ if (_tmp9_) {
+ GkbdLayout* _tmp10_;
+ guint _tmp11_ = 0U;
+ GkbdLayout* _tmp12_;
+ _tmp10_ = self->priv->m_gkbdlayout;
+ g_signal_parse_name ("changed", TYPE_GKBD_LAYOUT, &_tmp11_, NULL, FALSE);
+ g_signal_handlers_disconnect_matched (_tmp10_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp11_, 0, NULL, (GCallback) _panel_gkbdlayout_changed_cb_gkbd_layout_changed, self);
+ _tmp12_ = self->priv->m_gkbdlayout;
+ gkbd_layout_stop_listen (_tmp12_);
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ self->priv->m_gkbdlayout = NULL;
+ }
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_xkblayout = NULL;
_g_object_unref0 (keybinding_manager);
_g_object_unref0 (self->priv->m_bus);
_g_object_unref0 (self->priv->m_config);
@@ -1983,6 +3148,12 @@ static void panel_finalize (GObject* obj
_g_object_unref0 (self->priv->m_switcher);
_property_manager_unref0 (self->priv->m_property_manager);
_g_object_unref0 (self->priv->m_about_dialog);
+ _gkbd_layout_unref0 (self->priv->m_gkbdlayout);
+ _xkb_layout_unref0 (self->priv->m_xkblayout);
+ self->priv->m_layouts = (_vala_array_free (self->priv->m_layouts, self->priv->m_layouts_length1, (GDestroyNotify) g_free), NULL);
+ self->priv->m_variants = (_vala_array_free (self->priv->m_variants, self->priv->m_variants_length1, (GDestroyNotify) g_free), NULL);
+ _g_timer_destroy0 (self->priv->m_changed_layout_timer);
+ self->priv->ACCELERATOR_IME_HOTKEYS = (_vala_array_free (self->priv->ACCELERATOR_IME_HOTKEYS, self->priv->ACCELERATOR_IME_HOTKEYS_length1, (GDestroyNotify) g_free), NULL);
G_OBJECT_CLASS (panel_parent_class)->finalize (obj);
}
--- ibus/ui/gtk3/switcher.c.orig 2012-03-04 19:05:35.000000000 +0900
+++ ibus/ui/gtk3/switcher.c 2012-03-10 11:26:30.424984137 +0900
@@ -103,7 +103,7 @@ guint keybinding_manager_get_primary_mod
static void switcher_update_engines (Switcher* self, IBusEngineDesc** engines, int engines_length1);
static gboolean ___lambda15_ (Switcher* self);
static gboolean ____lambda15__gsource_func (gpointer self);
-static IBusEngineDesc** _vala_array_dup5 (IBusEngineDesc** self, int length);
+static IBusEngineDesc** _vala_array_dup7 (IBusEngineDesc** self, int length);
static Block5Data* block5_data_ref (Block5Data* _data5_);
static void block5_data_unref (Block5Data* _data5_);
IconWidget* icon_widget_new (const gchar* icon, gint size);
@@ -113,7 +113,7 @@ static gboolean _____lambda13_ (Block5Da
static gboolean ______lambda13__gtk_widget_enter_notify_event (GtkWidget* _sender, GdkEventCrossing* event, gpointer self);
static gboolean _____lambda14_ (Block5Data* _data5_, GdkEventButton* e);
static gboolean ______lambda14__gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
-static void _vala_array_add12 (GtkButton*** array, int* length, int* size, GtkButton* value);
+static void _vala_array_add19 (GtkButton*** array, int* length, int* size, GtkButton* value);
static void switcher_next_engine (Switcher* self);
static void switcher_previous_engine (Switcher* self);
static void switcher_real_show (GtkWidget* base);
@@ -207,7 +207,9 @@ gint switcher_run (Switcher* self, GdkEv
GdkGrabStatus _tmp48_;
GMainLoop* _tmp50_;
GMainLoop* _tmp51_;
- gint _tmp53_;
+ GdkDevice* _tmp52_;
+ GdkDevice* _tmp53_;
+ gint _tmp55_;
g_return_val_if_fail (self != NULL, 0);
g_return_val_if_fail (event != NULL, 0);
_tmp0_ = self->priv->m_loop;
@@ -335,17 +337,21 @@ gint switcher_run (Switcher* self, GdkEv
g_main_loop_run (_tmp51_);
_g_main_loop_unref0 (self->priv->m_loop);
self->priv->m_loop = NULL;
+ _tmp52_ = keyboard;
+ gdk_device_ungrab (_tmp52_, (guint32) GDK_CURRENT_TIME);
+ _tmp53_ = pointer;
+ gdk_device_ungrab (_tmp53_, (guint32) GDK_CURRENT_TIME);
gtk_widget_hide ((GtkWidget*) self);
while (TRUE) {
- gboolean _tmp52_ = FALSE;
- _tmp52_ = gtk_events_pending ();
- if (!_tmp52_) {
+ gboolean _tmp54_ = FALSE;
+ _tmp54_ = gtk_events_pending ();
+ if (!_tmp54_) {
break;
}
gtk_main_iteration ();
}
- _tmp53_ = self->priv->m_result;
- result = _tmp53_;
+ _tmp55_ = self->priv->m_result;
+ result = _tmp55_;
_g_object_unref0 (pointer);
_g_object_unref0 (keyboard);
_g_object_unref0 (device);
@@ -353,7 +359,7 @@ gint switcher_run (Switcher* self, GdkEv
}
-static IBusEngineDesc** _vala_array_dup5 (IBusEngineDesc** self, int length) {
+static IBusEngineDesc** _vala_array_dup7 (IBusEngineDesc** self, int length) {
IBusEngineDesc** result;
int i;
result = g_new0 (IBusEngineDesc*, length + 1);
@@ -432,7 +438,7 @@ static gboolean ______lambda14__gtk_widg
}
-static void _vala_array_add12 (GtkButton*** array, int* length, int* size, GtkButton* value) {
+static void _vala_array_add19 (GtkButton*** array, int* length, int* size, GtkButton* value) {
if ((*length) == (*size)) {
*size = (*size) ? (2 * (*size)) : 4;
*array = g_renew (GtkButton*, *array, (*size) + 1);
@@ -500,7 +506,7 @@ static void switcher_update_engines (Swi
height = _tmp7_;
_tmp8_ = engines;
_tmp8__length1 = engines_length1;
- _tmp9_ = (_tmp8_ != NULL) ? _vala_array_dup5 (_tmp8_, _tmp8__length1) : ((gpointer) _tmp8_);
+ _tmp9_ = (_tmp8_ != NULL) ? _vala_array_dup7 (_tmp8_, _tmp8__length1) : ((gpointer) _tmp8_);
_tmp9__length1 = _tmp8__length1;
self->priv->m_engines = (_vala_array_free (self->priv->m_engines, self->priv->m_engines_length1, (GDestroyNotify) g_object_unref), NULL);
self->priv->m_engines = _tmp9_;
@@ -599,7 +605,7 @@ static void switcher_update_engines (Swi
_tmp36__length1 = self->priv->m_buttons_length1;
_tmp37_ = _data5_->button;
_tmp38_ = _g_object_ref0 (_tmp37_);
- _vala_array_add12 (&self->priv->m_buttons, &self->priv->m_buttons_length1, &self->priv->_m_buttons_size_, _tmp38_);
+ _vala_array_add19 (&self->priv->m_buttons, &self->priv->m_buttons_length1, &self->priv->_m_buttons_size_, _tmp38_);
_g_object_unref0 (engine);
block5_data_unref (_data5_);
_data5_ = NULL;
@@ -725,7 +731,7 @@ static gboolean switcher_real_key_press_
guint _tmp5_;
_tmp4_ = pe;
_tmp5_ = (*_tmp4_).keyval;
- g_debug ("switcher.vala:225: 0x%04x", _tmp5_);
+ g_debug ("switcher.vala:228: 0x%04x", _tmp5_);
break;
}
}
@@ -742,7 +748,8 @@ static gboolean switcher_real_key_releas
guint _tmp1_;
gboolean _tmp2_ = FALSE;
GMainLoop* _tmp3_;
- guint _tmp4_;
+ GMainLoop* _tmp4_;
+ guint _tmp5_;
self = (Switcher*) base;
g_return_val_if_fail (e != NULL, FALSE);
pe = e;
@@ -754,9 +761,14 @@ static gboolean switcher_real_key_releas
return result;
}
_tmp3_ = self->priv->m_loop;
- g_main_loop_quit (_tmp3_);
- _tmp4_ = self->priv->m_selected_engine;
- self->priv->m_result = (gint) _tmp4_;
+ if (_tmp3_ == NULL) {
+ result = FALSE;
+ return result;
+ }
+ _tmp4_ = self->priv->m_loop;
+ g_main_loop_quit (_tmp4_);
+ _tmp5_ = self->priv->m_selected_engine;
+ self->priv->m_result = (gint) _tmp5_;
result = TRUE;
return result;
}
--- ibus/ui/gtk3/xkblayout.c.orig 2012-03-09 18:58:41.452804090 +0900
+++ ibus/ui/gtk3/xkblayout.c 2012-03-09 18:54:51.718558456 +0900
@@ -0,0 +1,2441 @@
+/* xkblayout.c generated by valac 0.15.1, the Vala compiler
+ * generated from xkblayout.vala, do not modify */
+
+/* vim:set et sts=4 sw=4:
+ *
+ * ibus - The Input Bus
+ *
+ * Copyright 2012 Red Hat, Inc.
+ * Copyright(c) 2012 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright(c) 2012 Takao Fujiwara <tfujiwar@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or(at your option) any later version.
+ *
+ * This library 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ibus.h>
+#include <stdio.h>
+#include <glib/gstdio.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_XKB_LAYOUT (xkb_layout_get_type ())
+#define XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_XKB_LAYOUT, XKBLayout))
+#define XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_XKB_LAYOUT, XKBLayoutClass))
+#define IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_XKB_LAYOUT))
+#define IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_XKB_LAYOUT))
+#define XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_XKB_LAYOUT, XKBLayoutClass))
+
+typedef struct _XKBLayout XKBLayout;
+typedef struct _XKBLayoutClass XKBLayoutClass;
+typedef struct _XKBLayoutPrivate XKBLayoutPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+typedef struct _ParamSpecXKBLayout ParamSpecXKBLayout;
+
+struct _XKBLayout {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ XKBLayoutPrivate * priv;
+};
+
+struct _XKBLayoutClass {
+ GTypeClass parent_class;
+ void (*finalize) (XKBLayout *self);
+};
+
+struct _XKBLayoutPrivate {
+ gchar* m_xkb_command;
+ IBusConfig* m_config;
+ gchar** m_xkb_latin_layouts;
+ gint m_xkb_latin_layouts_length1;
+ gint _m_xkb_latin_layouts_size_;
+ GPid m_xkb_pid;
+ GPid m_xmodmap_pid;
+ gchar* m_xmodmap_command;
+ gboolean m_use_xmodmap;
+ gchar** m_xmodmap_known_files;
+ gint m_xmodmap_known_files_length1;
+ gint _m_xmodmap_known_files_size_;
+ gchar* m_default_layout;
+ gchar* m_default_variant;
+ gchar* m_default_option;
+};
+
+struct _ParamSpecXKBLayout {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer xkb_layout_parent_class = NULL;
+
+gpointer xkb_layout_ref (gpointer instance);
+void xkb_layout_unref (gpointer instance);
+GParamSpec* param_spec_xkb_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_xkb_layout (GValue* value, gpointer v_object);
+void value_take_xkb_layout (GValue* value, gpointer v_object);
+gpointer value_get_xkb_layout (const GValue* value);
+GType xkb_layout_get_type (void) G_GNUC_CONST;
+#define XKB_LAYOUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_XKB_LAYOUT, XKBLayoutPrivate))
+enum {
+ XKB_LAYOUT_DUMMY_PROPERTY
+};
+XKBLayout* xkb_layout_new (IBusConfig* config);
+XKBLayout* xkb_layout_construct (GType object_type, IBusConfig* config);
+static void _vala_array_add20 (gchar*** array, int* length, int* size, gchar* value);
+static gchar* xkb_layout_get_output_from_cmdline (XKBLayout* self, const gchar* arg, const gchar* element);
+static void _vala_array_add21 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add22 (gchar*** array, int* length, int* size, gchar* value);
+static void xkb_layout_set_layout_cb (XKBLayout* self, GPid pid, gint status);
+void xkb_layout_set_xmodmap (XKBLayout* self);
+static void xkb_layout_set_xmodmap_cb (XKBLayout* self, GPid pid, gint status);
+static gchar* xkb_layout_get_fullpath (XKBLayout* self, const gchar* command);
+static gchar** xkb_layout_get_xkb_group_layout (XKBLayout* self, const gchar* layout, const gchar* variant, gint layouts_max_length, int* result_length1);
+gchar** xkb_layout_get_variant_from_layout (XKBLayout* self, const gchar* layout, int* result_length1);
+gchar** xkb_layout_get_option_from_layout (XKBLayout* self, const gchar* layout, int* result_length1);
+gchar* xkb_layout_get_layout (XKBLayout* self);
+gchar* xkb_layout_get_variant (XKBLayout* self);
+gchar* xkb_layout_get_option (XKBLayout* self);
+gint* xkb_layout_set_layout (XKBLayout* self, const gchar* _layout, const gchar* _variant, const gchar* _option, int* result_length1);
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle);
+static void _vala_array_add23 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add24 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add25 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add26 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add27 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add28 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add29 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add30 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add31 (gchar*** array, int* length, int* size, gchar* value);
+static void _vala_array_add32 (gchar*** array, int* length, int* size, gchar* value);
+static void _xkb_layout_set_layout_cb_gchild_watch_func (GPid pid, gint status, gpointer self);
+static void _xkb_layout_set_xmodmap_cb_gchild_watch_func (GPid pid, gint status, gpointer self);
+void xkb_layout_reset_layout (XKBLayout* self);
+static void xkb_layout_finalize (XKBLayout* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+static void _vala_array_add20 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+XKBLayout* xkb_layout_construct (GType object_type, IBusConfig* config) {
+ XKBLayout* self = NULL;
+ IBusConfig* _tmp1_;
+ IBusConfig* _tmp2_;
+ IBusConfig* _tmp3_;
+ self = (XKBLayout*) g_type_create_instance (object_type);
+ if (!HAVE_IBUS_XKB) {
+ gchar* _tmp0_;
+ _tmp0_ = g_strdup ("setxkbmap");
+ _g_free0 (self->priv->m_xkb_command);
+ self->priv->m_xkb_command = _tmp0_;
+ }
+ _tmp1_ = config;
+ _tmp2_ = _g_object_ref0 (_tmp1_);
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_config = _tmp2_;
+ _tmp3_ = config;
+ if (_tmp3_ != NULL) {
+ IBusConfig* _tmp4_;
+ GVariant* _tmp5_ = NULL;
+ GVariant* value;
+ gboolean _tmp21_;
+ _tmp4_ = config;
+ _tmp5_ = ibus_config_get_value (_tmp4_, "general", "xkb_latin_layouts");
+ value = _tmp5_;
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp6_;
+ _tmp6_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp7_;
+ gboolean _tmp9_ = FALSE;
+ GVariant* _tmp10_;
+ gboolean _tmp14_;
+ gchar** _tmp15_;
+ gint _tmp15__length1;
+ GVariant* _tmp16_;
+ gint _tmp17_;
+ GVariant* _tmp18_ = NULL;
+ GVariant* _tmp19_;
+ gchar* _tmp20_ = NULL;
+ _tmp7_ = _tmp6_;
+ if (!_tmp7_) {
+ gint _tmp8_;
+ _tmp8_ = i;
+ i = _tmp8_ + 1;
+ }
+ _tmp6_ = FALSE;
+ _tmp10_ = value;
+ if (_tmp10_ != NULL) {
+ gint _tmp11_;
+ GVariant* _tmp12_;
+ gsize _tmp13_ = 0UL;
+ _tmp11_ = i;
+ _tmp12_ = value;
+ _tmp13_ = g_variant_n_children (_tmp12_);
+ _tmp9_ = ((gsize) _tmp11_) < _tmp13_;
+ } else {
+ _tmp9_ = FALSE;
+ }
+ _tmp14_ = _tmp9_;
+ if (!_tmp14_) {
+ break;
+ }
+ _tmp15_ = self->priv->m_xkb_latin_layouts;
+ _tmp15__length1 = self->priv->m_xkb_latin_layouts_length1;
+ _tmp16_ = value;
+ _tmp17_ = i;
+ _tmp18_ = g_variant_get_child_value (_tmp16_, (gsize) _tmp17_);
+ _tmp19_ = _tmp18_;
+ _tmp20_ = g_variant_dup_string (_tmp19_, NULL);
+ _vala_array_add20 (&self->priv->m_xkb_latin_layouts, &self->priv->m_xkb_latin_layouts_length1, &self->priv->_m_xkb_latin_layouts_size_, _tmp20_);
+ _g_variant_unref0 (_tmp19_);
+ }
+ }
+ }
+ _tmp21_ = self->priv->m_use_xmodmap;
+ if (_tmp21_) {
+ IBusConfig* _tmp22_;
+ GVariant* _tmp23_ = NULL;
+ GVariant* _tmp24_;
+ gboolean _tmp25_ = FALSE;
+ _tmp22_ = config;
+ _tmp23_ = ibus_config_get_value (_tmp22_, "general", "use_xmodmap");
+ _tmp24_ = _tmp23_;
+ _tmp25_ = g_variant_get_boolean (_tmp24_);
+ self->priv->m_use_xmodmap = _tmp25_;
+ _g_variant_unref0 (_tmp24_);
+ }
+ _g_variant_unref0 (value);
+ }
+ return self;
+}
+
+
+XKBLayout* xkb_layout_new (IBusConfig* config) {
+ return xkb_layout_construct (TYPE_XKB_LAYOUT, config);
+}
+
+
+static void _vala_array_add21 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add22 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static gchar* string_slice (const gchar* self, glong start, glong end) {
+ gchar* result = NULL;
+ gint _tmp0_;
+ gint _tmp1_;
+ glong string_length;
+ glong _tmp2_;
+ glong _tmp5_;
+ gboolean _tmp8_ = FALSE;
+ glong _tmp9_;
+ gboolean _tmp12_;
+ gboolean _tmp13_ = FALSE;
+ glong _tmp14_;
+ gboolean _tmp17_;
+ glong _tmp18_;
+ glong _tmp19_;
+ glong _tmp20_;
+ glong _tmp21_;
+ glong _tmp22_;
+ gchar* _tmp23_ = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ _tmp0_ = strlen (self);
+ _tmp1_ = _tmp0_;
+ string_length = (glong) _tmp1_;
+ _tmp2_ = start;
+ if (_tmp2_ < ((glong) 0)) {
+ glong _tmp3_;
+ glong _tmp4_;
+ _tmp3_ = string_length;
+ _tmp4_ = start;
+ start = _tmp3_ + _tmp4_;
+ }
+ _tmp5_ = end;
+ if (_tmp5_ < ((glong) 0)) {
+ glong _tmp6_;
+ glong _tmp7_;
+ _tmp6_ = string_length;
+ _tmp7_ = end;
+ end = _tmp6_ + _tmp7_;
+ }
+ _tmp9_ = start;
+ if (_tmp9_ >= ((glong) 0)) {
+ glong _tmp10_;
+ glong _tmp11_;
+ _tmp10_ = start;
+ _tmp11_ = string_length;
+ _tmp8_ = _tmp10_ <= _tmp11_;
+ } else {
+ _tmp8_ = FALSE;
+ }
+ _tmp12_ = _tmp8_;
+ g_return_val_if_fail (_tmp12_, NULL);
+ _tmp14_ = end;
+ if (_tmp14_ >= ((glong) 0)) {
+ glong _tmp15_;
+ glong _tmp16_;
+ _tmp15_ = end;
+ _tmp16_ = string_length;
+ _tmp13_ = _tmp15_ <= _tmp16_;
+ } else {
+ _tmp13_ = FALSE;
+ }
+ _tmp17_ = _tmp13_;
+ g_return_val_if_fail (_tmp17_, NULL);
+ _tmp18_ = start;
+ _tmp19_ = end;
+ g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
+ _tmp20_ = start;
+ _tmp21_ = end;
+ _tmp22_ = start;
+ _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
+ result = _tmp23_;
+ return result;
+}
+
+
+static gchar* xkb_layout_get_output_from_cmdline (XKBLayout* self, const gchar* arg, const gchar* element) {
+ gchar* result = NULL;
+ gchar** _tmp0_ = NULL;
+ gchar** exec_command;
+ gint exec_command_length1;
+ gint _exec_command_size_;
+ gchar** _tmp1_;
+ gint _tmp1__length1;
+ const gchar* _tmp2_;
+ gchar* _tmp3_;
+ gchar** _tmp4_;
+ gint _tmp4__length1;
+ const gchar* _tmp5_;
+ gchar* _tmp6_;
+ gchar* standard_output;
+ gchar* standard_error;
+ gint exit_status;
+ gchar* _tmp7_;
+ gchar* retval;
+ gint _tmp15_;
+ const gchar* _tmp23_;
+ const gchar* _tmp25_;
+ gchar** _tmp26_;
+ gchar** _tmp27_ = NULL;
+ GError * _inner_error_ = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (arg != NULL, NULL);
+ g_return_val_if_fail (element != NULL, NULL);
+ _tmp0_ = g_new0 (gchar*, 0 + 1);
+ exec_command = _tmp0_;
+ exec_command_length1 = 0;
+ _exec_command_size_ = exec_command_length1;
+ _tmp1_ = exec_command;
+ _tmp1__length1 = exec_command_length1;
+ _tmp2_ = self->priv->m_xkb_command;
+ _tmp3_ = g_strdup (_tmp2_);
+ _vala_array_add21 (&exec_command, &exec_command_length1, &_exec_command_size_, _tmp3_);
+ _tmp4_ = exec_command;
+ _tmp4__length1 = exec_command_length1;
+ _tmp5_ = arg;
+ _tmp6_ = g_strdup (_tmp5_);
+ _vala_array_add22 (&exec_command, &exec_command_length1, &_exec_command_size_, _tmp6_);
+ standard_output = NULL;
+ standard_error = NULL;
+ exit_status = 0;
+ _tmp7_ = g_strdup ("");
+ retval = _tmp7_;
+ {
+ gchar** _tmp8_;
+ gint _tmp8__length1;
+ gchar* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gint _tmp11_ = 0;
+ _tmp8_ = exec_command;
+ _tmp8__length1 = exec_command_length1;
+ g_spawn_sync (NULL, _tmp8_, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &_tmp9_, &_tmp10_, &_tmp11_, &_inner_error_);
+ _g_free0 (standard_output);
+ standard_output = _tmp9_;
+ _g_free0 (standard_error);
+ standard_error = _tmp10_;
+ exit_status = _tmp11_;
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_SPAWN_ERROR) {
+ goto __catch3_g_spawn_error;
+ }
+ _g_free0 (retval);
+ _g_free0 (standard_error);
+ _g_free0 (standard_output);
+ exec_command = (_vala_array_free (exec_command, exec_command_length1, (GDestroyNotify) g_free), NULL);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+ }
+ goto __finally3;
+ __catch3_g_spawn_error:
+ {
+ GError* err = NULL;
+ FILE* _tmp12_;
+ GError* _tmp13_;
+ const gchar* _tmp14_;
+ err = _inner_error_;
+ _inner_error_ = NULL;
+ _tmp12_ = stderr;
+ _tmp13_ = err;
+ _tmp14_ = _tmp13_->message;
+ fprintf (_tmp12_, "IBUS_ERROR: %s\n", _tmp14_);
+ _g_error_free0 (err);
+ }
+ __finally3:
+ if (_inner_error_ != NULL) {
+ _g_free0 (retval);
+ _g_free0 (standard_error);
+ _g_free0 (standard_output);
+ exec_command = (_vala_array_free (exec_command, exec_command_length1, (GDestroyNotify) g_free), NULL);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+ _tmp15_ = exit_status;
+ if (_tmp15_ != 0) {
+ const gchar* _tmp16_;
+ gchar* _tmp17_;
+ gchar* _tmp18_;
+ const gchar* _tmp19_;
+ FILE* _tmp21_;
+ const gchar* _tmp22_;
+ _tmp16_ = standard_error;
+ _tmp17_ = g_strdup (_tmp16_);
+ _tmp18_ = _tmp17_;
+ _tmp19_ = _tmp18_;
+ if (_tmp19_ == NULL) {
+ gchar* _tmp20_;
+ _tmp20_ = g_strdup ("");
+ _g_free0 (_tmp18_);
+ _tmp18_ = _tmp20_;
+ }
+ _tmp21_ = stderr;
+ _tmp22_ = _tmp18_;
+ fprintf (_tmp21_, "IBUS_ERROR: %s\n", _tmp22_);
+ _g_free0 (_tmp18_);
+ }
+ _tmp23_ = standard_output;
+ if (_tmp23_ == NULL) {
+ gchar* _tmp24_;
+ _tmp24_ = g_strdup ("");
+ result = _tmp24_;
+ _g_free0 (retval);
+ _g_free0 (standard_error);
+ _g_free0 (standard_output);
+ exec_command = (_vala_array_free (exec_command, exec_command_length1, (GDestroyNotify) g_free), NULL);
+ return result;
+ }
+ _tmp25_ = standard_output;
+ _tmp27_ = _tmp26_ = g_strsplit (_tmp25_, "\n", 0);
+ {
+ gchar** line_collection = NULL;
+ gint line_collection_length1 = 0;
+ gint _line_collection_size_ = 0;
+ gint line_it = 0;
+ line_collection = _tmp27_;
+ line_collection_length1 = _vala_array_length (_tmp26_);
+ for (line_it = 0; line_it < _vala_array_length (_tmp26_); line_it = line_it + 1) {
+ gchar* _tmp28_;
+ gchar* line = NULL;
+ _tmp28_ = g_strdup (line_collection[line_it]);
+ line = _tmp28_;
+ {
+ gboolean _tmp29_ = FALSE;
+ const gchar* _tmp30_;
+ gint _tmp31_;
+ gint _tmp32_;
+ const gchar* _tmp33_;
+ gint _tmp34_;
+ gint _tmp35_;
+ gboolean _tmp43_;
+ _tmp30_ = element;
+ _tmp31_ = strlen (_tmp30_);
+ _tmp32_ = _tmp31_;
+ _tmp33_ = line;
+ _tmp34_ = strlen (_tmp33_);
+ _tmp35_ = _tmp34_;
+ if (_tmp32_ <= _tmp35_) {
+ const gchar* _tmp36_;
+ const gchar* _tmp37_;
+ gint _tmp38_;
+ gint _tmp39_;
+ gchar* _tmp40_ = NULL;
+ gchar* _tmp41_;
+ const gchar* _tmp42_;
+ _tmp36_ = line;
+ _tmp37_ = element;
+ _tmp38_ = strlen (_tmp37_);
+ _tmp39_ = _tmp38_;
+ _tmp40_ = string_slice (_tmp36_, (glong) 0, (glong) _tmp39_);
+ _tmp41_ = _tmp40_;
+ _tmp42_ = element;
+ _tmp29_ = g_strcmp0 (_tmp41_, _tmp42_) == 0;
+ _g_free0 (_tmp41_);
+ } else {
+ _tmp29_ = FALSE;
+ }
+ _tmp43_ = _tmp29_;
+ if (_tmp43_) {
+ const gchar* _tmp44_;
+ const gchar* _tmp45_;
+ gint _tmp46_;
+ gint _tmp47_;
+ const gchar* _tmp48_;
+ gint _tmp49_;
+ gint _tmp50_;
+ gchar* _tmp51_ = NULL;
+ _tmp44_ = line;
+ _tmp45_ = element;
+ _tmp46_ = strlen (_tmp45_);
+ _tmp47_ = _tmp46_;
+ _tmp48_ = line;
+ _tmp49_ = strlen (_tmp48_);
+ _tmp50_ = _tmp49_;
+ _tmp51_ = string_slice (_tmp44_, (glong) _tmp47_, (glong) _tmp50_);
+ _g_free0 (retval);
+ retval = _tmp51_;
+ }
+ _g_free0 (line);
+ }
+ }
+ line_collection = (_vala_array_free (line_collection, line_collection_length1, (GDestroyNotify) g_free), NULL);
+ }
+ result = retval;
+ _g_free0 (standard_error);
+ _g_free0 (standard_output);
+ exec_command = (_vala_array_free (exec_command, exec_command_length1, (GDestroyNotify) g_free), NULL);
+ return result;
+}
+
+
+static void xkb_layout_set_layout_cb (XKBLayout* self, GPid pid, gint status) {
+ GPid _tmp0_;
+ GPid _tmp1_;
+ GPid _tmp3_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_xkb_pid;
+ _tmp1_ = pid;
+ if (_tmp0_ != _tmp1_) {
+ FILE* _tmp2_;
+ _tmp2_ = stderr;
+ fprintf (_tmp2_, "IBUS_ERROR: set_layout_cb has another pid\n");
+ return;
+ }
+ _tmp3_ = self->priv->m_xkb_pid;
+ g_spawn_close_pid (_tmp3_);
+ self->priv->m_xkb_pid = (GPid) (-1);
+ xkb_layout_set_xmodmap (self);
+}
+
+
+static void xkb_layout_set_xmodmap_cb (XKBLayout* self, GPid pid, gint status) {
+ GPid _tmp0_;
+ GPid _tmp1_;
+ GPid _tmp3_;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_xmodmap_pid;
+ _tmp1_ = pid;
+ if (_tmp0_ != _tmp1_) {
+ FILE* _tmp2_;
+ _tmp2_ = stderr;
+ fprintf (_tmp2_, "IBUS_ERROR: set_xmodmap_cb has another pid\n");
+ return;
+ }
+ _tmp3_ = self->priv->m_xmodmap_pid;
+ g_spawn_close_pid (_tmp3_);
+ self->priv->m_xmodmap_pid = (GPid) (-1);
+}
+
+
+static gchar* xkb_layout_get_fullpath (XKBLayout* self, const gchar* command) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_;
+ gchar* envpath;
+ const gchar* _tmp2_;
+ gchar** _tmp3_;
+ gchar** _tmp4_ = NULL;
+ gchar* _tmp11_;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (command != NULL, NULL);
+ _tmp0_ = g_getenv ("PATH");
+ _tmp1_ = g_strdup (_tmp0_);
+ envpath = _tmp1_;
+ _tmp2_ = envpath;
+ _tmp4_ = _tmp3_ = g_strsplit (_tmp2_, ":", 0);
+ {
+ gchar** dir_collection = NULL;
+ gint dir_collection_length1 = 0;
+ gint _dir_collection_size_ = 0;
+ gint dir_it = 0;
+ dir_collection = _tmp4_;
+ dir_collection_length1 = _vala_array_length (_tmp3_);
+ for (dir_it = 0; dir_it < _vala_array_length (_tmp3_); dir_it = dir_it + 1) {
+ gchar* _tmp5_;
+ gchar* dir = NULL;
+ _tmp5_ = g_strdup (dir_collection[dir_it]);
+ dir = _tmp5_;
+ {
+ const gchar* _tmp6_;
+ const gchar* _tmp7_;
+ gchar* _tmp8_ = NULL;
+ gchar* filepath;
+ const gchar* _tmp9_;
+ gboolean _tmp10_ = FALSE;
+ _tmp6_ = dir;
+ _tmp7_ = command;
+ _tmp8_ = g_build_filename (_tmp6_, _tmp7_, NULL);
+ filepath = _tmp8_;
+ _tmp9_ = filepath;
+ _tmp10_ = g_file_test (_tmp9_, G_FILE_TEST_EXISTS);
+ if (_tmp10_) {
+ result = filepath;
+ _g_free0 (dir);
+ dir_collection = (_vala_array_free (dir_collection, dir_collection_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (envpath);
+ return result;
+ }
+ _g_free0 (filepath);
+ _g_free0 (dir);
+ }
+ }
+ dir_collection = (_vala_array_free (dir_collection, dir_collection_length1, (GDestroyNotify) g_free), NULL);
+ }
+ _tmp11_ = g_strdup ("");
+ result = _tmp11_;
+ _g_free0 (envpath);
+ return result;
+}
+
+
+static gchar** xkb_layout_get_xkb_group_layout (XKBLayout* self, const gchar* layout, const gchar* variant, gint layouts_max_length, int* result_length1) {
+ gchar** result = NULL;
+ gint group_id;
+ gint i;
+ const gchar* _tmp0_;
+ gchar** _tmp1_;
+ gchar** _tmp2_ = NULL;
+ gchar** layouts;
+ gint layouts_length1;
+ gint _layouts_size_;
+ const gchar* _tmp3_;
+ gchar** _tmp4_;
+ gchar** _tmp5_ = NULL;
+ gchar** variants;
+ gint variants_length1;
+ gint _variants_size_;
+ gchar* _tmp6_;
+ gchar* group_layouts;
+ gchar* _tmp7_;
+ gchar* group_variants;
+ gboolean has_variant;
+ gboolean include_keymap;
+ const gchar* _tmp63_;
+ gboolean _tmp64_;
+ gboolean _tmp72_;
+ const gchar* _tmp73_;
+ gchar* _tmp74_;
+ const gchar* _tmp75_;
+ gchar* _tmp76_;
+ gint _tmp77_;
+ gchar* _tmp78_ = NULL;
+ gchar** _tmp79_ = NULL;
+ gchar** _tmp80_;
+ gint _tmp80__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (layout != NULL, NULL);
+ g_return_val_if_fail (variant != NULL, NULL);
+ group_id = 0;
+ i = 0;
+ _tmp0_ = self->priv->m_default_layout;
+ _tmp2_ = _tmp1_ = g_strsplit (_tmp0_, ",", 0);
+ layouts = _tmp2_;
+ layouts_length1 = _vala_array_length (_tmp1_);
+ _layouts_size_ = layouts_length1;
+ _tmp3_ = self->priv->m_default_variant;
+ _tmp5_ = _tmp4_ = g_strsplit (_tmp3_, ",", 0);
+ variants = _tmp5_;
+ variants_length1 = _vala_array_length (_tmp4_);
+ _variants_size_ = variants_length1;
+ _tmp6_ = g_strdup ("");
+ group_layouts = _tmp6_;
+ _tmp7_ = g_strdup ("");
+ group_variants = _tmp7_;
+ has_variant = FALSE;
+ include_keymap = FALSE;
+ {
+ gboolean _tmp8_;
+ i = 0;
+ _tmp8_ = TRUE;
+ while (TRUE) {
+ gboolean _tmp9_;
+ gint _tmp11_;
+ gchar** _tmp12_;
+ gint _tmp12__length1;
+ gint _tmp13_;
+ gint _tmp14_;
+ gint _tmp15_;
+ gint _tmp25_;
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ gboolean _tmp39_ = FALSE;
+ const gchar* _tmp40_;
+ gchar** _tmp41_;
+ gint _tmp41__length1;
+ gint _tmp42_;
+ const gchar* _tmp43_;
+ gboolean _tmp48_;
+ gchar** _tmp50_;
+ gint _tmp50__length1;
+ gint _tmp51_;
+ const gchar* _tmp52_;
+ gint _tmp53_;
+ _tmp9_ = _tmp8_;
+ if (!_tmp9_) {
+ gint _tmp10_;
+ _tmp10_ = i;
+ i = _tmp10_ + 1;
+ }
+ _tmp8_ = FALSE;
+ _tmp11_ = i;
+ _tmp12_ = layouts;
+ _tmp12__length1 = layouts_length1;
+ if (!(_tmp11_ < _tmp12__length1)) {
+ break;
+ }
+ _tmp13_ = i;
+ _tmp14_ = layouts_max_length;
+ if (_tmp13_ >= (_tmp14_ - 1)) {
+ break;
+ }
+ _tmp15_ = i;
+ if (_tmp15_ == 0) {
+ gchar** _tmp16_;
+ gint _tmp16__length1;
+ gint _tmp17_;
+ const gchar* _tmp18_;
+ gchar* _tmp19_;
+ _tmp16_ = layouts;
+ _tmp16__length1 = layouts_length1;
+ _tmp17_ = i;
+ _tmp18_ = _tmp16_[_tmp17_];
+ _tmp19_ = g_strdup (_tmp18_);
+ _g_free0 (group_layouts);
+ group_layouts = _tmp19_;
+ } else {
+ const gchar* _tmp20_;
+ gchar** _tmp21_;
+ gint _tmp21__length1;
+ gint _tmp22_;
+ const gchar* _tmp23_;
+ gchar* _tmp24_ = NULL;
+ _tmp20_ = group_layouts;
+ _tmp21_ = layouts;
+ _tmp21__length1 = layouts_length1;
+ _tmp22_ = i;
+ _tmp23_ = _tmp21_[_tmp22_];
+ _tmp24_ = g_strdup_printf ("%s,%s", _tmp20_, _tmp23_);
+ _g_free0 (group_layouts);
+ group_layouts = _tmp24_;
+ }
+ _tmp25_ = i;
+ _tmp26_ = variants;
+ _tmp26__length1 = variants_length1;
+ if (_tmp25_ >= _tmp26__length1) {
+ gint _tmp27_;
+ gboolean _tmp31_ = FALSE;
+ const gchar* _tmp32_;
+ gchar** _tmp33_;
+ gint _tmp33__length1;
+ gint _tmp34_;
+ const gchar* _tmp35_;
+ gboolean _tmp37_;
+ _tmp27_ = i;
+ if (_tmp27_ == 0) {
+ gchar* _tmp28_;
+ _tmp28_ = g_strdup ("");
+ _g_free0 (group_variants);
+ group_variants = _tmp28_;
+ } else {
+ const gchar* _tmp29_;
+ gchar* _tmp30_;
+ _tmp29_ = group_variants;
+ _tmp30_ = g_strconcat (_tmp29_, ",", NULL);
+ _g_free0 (group_variants);
+ group_variants = _tmp30_;
+ }
+ _tmp32_ = layout;
+ _tmp33_ = layouts;
+ _tmp33__length1 = layouts_length1;
+ _tmp34_ = i;
+ _tmp35_ = _tmp33_[_tmp34_];
+ if (g_strcmp0 (_tmp32_, _tmp35_) == 0) {
+ const gchar* _tmp36_;
+ _tmp36_ = variant;
+ _tmp31_ = g_strcmp0 (_tmp36_, "") == 0;
+ } else {
+ _tmp31_ = FALSE;
+ }
+ _tmp37_ = _tmp31_;
+ if (_tmp37_) {
+ gint _tmp38_;
+ include_keymap = TRUE;
+ _tmp38_ = i;
+ group_id = _tmp38_;
+ }
+ continue;
+ }
+ _tmp40_ = layout;
+ _tmp41_ = layouts;
+ _tmp41__length1 = layouts_length1;
+ _tmp42_ = i;
+ _tmp43_ = _tmp41_[_tmp42_];
+ if (g_strcmp0 (_tmp40_, _tmp43_) == 0) {
+ const gchar* _tmp44_;
+ gchar** _tmp45_;
+ gint _tmp45__length1;
+ gint _tmp46_;
+ const gchar* _tmp47_;
+ _tmp44_ = variant;
+ _tmp45_ = variants;
+ _tmp45__length1 = variants_length1;
+ _tmp46_ = i;
+ _tmp47_ = _tmp45_[_tmp46_];
+ _tmp39_ = g_strcmp0 (_tmp44_, _tmp47_) == 0;
+ } else {
+ _tmp39_ = FALSE;
+ }
+ _tmp48_ = _tmp39_;
+ if (_tmp48_) {
+ gint _tmp49_;
+ include_keymap = TRUE;
+ _tmp49_ = i;
+ group_id = _tmp49_;
+ }
+ _tmp50_ = variants;
+ _tmp50__length1 = variants_length1;
+ _tmp51_ = i;
+ _tmp52_ = _tmp50_[_tmp51_];
+ if (g_strcmp0 (_tmp52_, "") != 0) {
+ has_variant = TRUE;
+ }
+ _tmp53_ = i;
+ if (_tmp53_ == 0) {
+ gchar** _tmp54_;
+ gint _tmp54__length1;
+ gint _tmp55_;
+ const gchar* _tmp56_;
+ gchar* _tmp57_;
+ _tmp54_ = variants;
+ _tmp54__length1 = variants_length1;
+ _tmp55_ = i;
+ _tmp56_ = _tmp54_[_tmp55_];
+ _tmp57_ = g_strdup (_tmp56_);
+ _g_free0 (group_variants);
+ group_variants = _tmp57_;
+ } else {
+ const gchar* _tmp58_;
+ gchar** _tmp59_;
+ gint _tmp59__length1;
+ gint _tmp60_;
+ const gchar* _tmp61_;
+ gchar* _tmp62_ = NULL;
+ _tmp58_ = group_variants;
+ _tmp59_ = variants;
+ _tmp59__length1 = variants_length1;
+ _tmp60_ = i;
+ _tmp61_ = _tmp59_[_tmp60_];
+ _tmp62_ = g_strdup_printf ("%s,%s", _tmp58_, _tmp61_);
+ _g_free0 (group_variants);
+ group_variants = _tmp62_;
+ }
+ }
+ }
+ _tmp63_ = variant;
+ if (g_strcmp0 (_tmp63_, "") != 0) {
+ has_variant = TRUE;
+ }
+ _tmp64_ = include_keymap;
+ if (!_tmp64_) {
+ const gchar* _tmp65_;
+ const gchar* _tmp66_;
+ gchar* _tmp67_ = NULL;
+ const gchar* _tmp68_;
+ const gchar* _tmp69_;
+ gchar* _tmp70_ = NULL;
+ gint _tmp71_;
+ _tmp65_ = group_layouts;
+ _tmp66_ = layout;
+ _tmp67_ = g_strdup_printf ("%s,%s", _tmp65_, _tmp66_);
+ _g_free0 (group_layouts);
+ group_layouts = _tmp67_;
+ _tmp68_ = group_variants;
+ _tmp69_ = variant;
+ _tmp70_ = g_strdup_printf ("%s,%s", _tmp68_, _tmp69_);
+ _g_free0 (group_variants);
+ group_variants = _tmp70_;
+ _tmp71_ = i;
+ group_id = _tmp71_;
+ }
+ _tmp72_ = has_variant;
+ if (!_tmp72_) {
+ _g_free0 (group_variants);
+ group_variants = NULL;
+ }
+ _tmp73_ = group_layouts;
+ _tmp74_ = g_strdup (_tmp73_);
+ _tmp75_ = group_variants;
+ _tmp76_ = g_strdup (_tmp75_);
+ _tmp77_ = group_id;
+ _tmp78_ = g_strdup_printf ("%i", _tmp77_);
+ _tmp79_ = g_new0 (gchar*, 3 + 1);
+ _tmp79_[0] = _tmp74_;
+ _tmp79_[1] = _tmp76_;
+ _tmp79_[2] = _tmp78_;
+ _tmp80_ = _tmp79_;
+ _tmp80__length1 = 3;
+ if (result_length1) {
+ *result_length1 = _tmp80__length1;
+ }
+ result = _tmp80_;
+ _g_free0 (group_variants);
+ _g_free0 (group_layouts);
+ variants = (_vala_array_free (variants, variants_length1, (GDestroyNotify) g_free), NULL);
+ layouts = (_vala_array_free (layouts, layouts_length1, (GDestroyNotify) g_free), NULL);
+ return result;
+}
+
+
+static gint string_index_of (const gchar* self, const gchar* needle, gint start_index) {
+ gint result = 0;
+ gint _tmp0_;
+ const gchar* _tmp1_;
+ gchar* _tmp2_ = NULL;
+ gchar* _result_;
+ gchar* _tmp3_;
+ g_return_val_if_fail (self != NULL, 0);
+ g_return_val_if_fail (needle != NULL, 0);
+ _tmp0_ = start_index;
+ _tmp1_ = needle;
+ _tmp2_ = strstr (((gchar*) self) + _tmp0_, (gchar*) _tmp1_);
+ _result_ = _tmp2_;
+ _tmp3_ = _result_;
+ if (_tmp3_ != NULL) {
+ gchar* _tmp4_;
+ _tmp4_ = _result_;
+ result = (gint) (_tmp4_ - ((gchar*) self));
+ return result;
+ } else {
+ result = -1;
+ return result;
+ }
+}
+
+
+gchar** xkb_layout_get_variant_from_layout (XKBLayout* self, const gchar* layout, int* result_length1) {
+ gchar** result = NULL;
+ const gchar* _tmp0_;
+ gint _tmp1_ = 0;
+ gint left_bracket;
+ const gchar* _tmp2_;
+ gint _tmp3_ = 0;
+ gint right_bracket;
+ gboolean _tmp4_ = FALSE;
+ gint _tmp5_;
+ gboolean _tmp8_;
+ const gchar* _tmp28_;
+ gchar* _tmp29_;
+ gchar* _tmp30_;
+ gchar** _tmp31_ = NULL;
+ gchar** _tmp32_;
+ gint _tmp32__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (layout != NULL, NULL);
+ _tmp0_ = layout;
+ _tmp1_ = string_index_of (_tmp0_, "(", 0);
+ left_bracket = _tmp1_;
+ _tmp2_ = layout;
+ _tmp3_ = string_index_of (_tmp2_, ")", 0);
+ right_bracket = _tmp3_;
+ _tmp5_ = left_bracket;
+ if (_tmp5_ >= 0) {
+ gint _tmp6_;
+ gint _tmp7_;
+ _tmp6_ = right_bracket;
+ _tmp7_ = left_bracket;
+ _tmp4_ = _tmp6_ > _tmp7_;
+ } else {
+ _tmp4_ = FALSE;
+ }
+ _tmp8_ = _tmp4_;
+ if (_tmp8_) {
+ const gchar* _tmp9_;
+ gint _tmp10_;
+ gchar* _tmp11_ = NULL;
+ gchar* _tmp12_;
+ const gchar* _tmp13_;
+ gint _tmp14_;
+ const gchar* _tmp15_;
+ gint _tmp16_;
+ gint _tmp17_;
+ gchar* _tmp18_ = NULL;
+ gchar* _tmp19_;
+ gchar* _tmp20_;
+ const gchar* _tmp21_;
+ gint _tmp22_;
+ gint _tmp23_;
+ gchar* _tmp24_ = NULL;
+ gchar** _tmp25_ = NULL;
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ gchar** _tmp27_;
+ gint _tmp27__length1;
+ _tmp9_ = layout;
+ _tmp10_ = left_bracket;
+ _tmp11_ = string_slice (_tmp9_, (glong) 0, (glong) _tmp10_);
+ _tmp12_ = _tmp11_;
+ _tmp13_ = layout;
+ _tmp14_ = right_bracket;
+ _tmp15_ = layout;
+ _tmp16_ = strlen (_tmp15_);
+ _tmp17_ = _tmp16_;
+ _tmp18_ = string_slice (_tmp13_, (glong) (_tmp14_ + 1), (glong) _tmp17_);
+ _tmp19_ = _tmp18_;
+ _tmp20_ = g_strconcat (_tmp12_, _tmp19_, NULL);
+ _tmp21_ = layout;
+ _tmp22_ = left_bracket;
+ _tmp23_ = right_bracket;
+ _tmp24_ = string_slice (_tmp21_, (glong) (_tmp22_ + 1), (glong) _tmp23_);
+ _tmp25_ = g_new0 (gchar*, 2 + 1);
+ _tmp25_[0] = _tmp20_;
+ _tmp25_[1] = _tmp24_;
+ _tmp26_ = _tmp25_;
+ _tmp26__length1 = 2;
+ _g_free0 (_tmp19_);
+ _g_free0 (_tmp12_);
+ _tmp27_ = _tmp26_;
+ _tmp27__length1 = _tmp26__length1;
+ if (result_length1) {
+ *result_length1 = _tmp27__length1;
+ }
+ result = _tmp27_;
+ return result;
+ }
+ _tmp28_ = layout;
+ _tmp29_ = g_strdup (_tmp28_);
+ _tmp30_ = g_strdup ("default");
+ _tmp31_ = g_new0 (gchar*, 2 + 1);
+ _tmp31_[0] = _tmp29_;
+ _tmp31_[1] = _tmp30_;
+ _tmp32_ = _tmp31_;
+ _tmp32__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp32__length1;
+ }
+ result = _tmp32_;
+ return result;
+}
+
+
+gchar** xkb_layout_get_option_from_layout (XKBLayout* self, const gchar* layout, int* result_length1) {
+ gchar** result = NULL;
+ const gchar* _tmp0_;
+ gint _tmp1_ = 0;
+ gint left_bracket;
+ const gchar* _tmp2_;
+ gint _tmp3_ = 0;
+ gint right_bracket;
+ gboolean _tmp4_ = FALSE;
+ gint _tmp5_;
+ gboolean _tmp8_;
+ const gchar* _tmp28_;
+ gchar* _tmp29_;
+ gchar* _tmp30_;
+ gchar** _tmp31_ = NULL;
+ gchar** _tmp32_;
+ gint _tmp32__length1;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (layout != NULL, NULL);
+ _tmp0_ = layout;
+ _tmp1_ = string_index_of (_tmp0_, "[", 0);
+ left_bracket = _tmp1_;
+ _tmp2_ = layout;
+ _tmp3_ = string_index_of (_tmp2_, "]", 0);
+ right_bracket = _tmp3_;
+ _tmp5_ = left_bracket;
+ if (_tmp5_ >= 0) {
+ gint _tmp6_;
+ gint _tmp7_;
+ _tmp6_ = right_bracket;
+ _tmp7_ = left_bracket;
+ _tmp4_ = _tmp6_ > _tmp7_;
+ } else {
+ _tmp4_ = FALSE;
+ }
+ _tmp8_ = _tmp4_;
+ if (_tmp8_) {
+ const gchar* _tmp9_;
+ gint _tmp10_;
+ gchar* _tmp11_ = NULL;
+ gchar* _tmp12_;
+ const gchar* _tmp13_;
+ gint _tmp14_;
+ const gchar* _tmp15_;
+ gint _tmp16_;
+ gint _tmp17_;
+ gchar* _tmp18_ = NULL;
+ gchar* _tmp19_;
+ gchar* _tmp20_;
+ const gchar* _tmp21_;
+ gint _tmp22_;
+ gint _tmp23_;
+ gchar* _tmp24_ = NULL;
+ gchar** _tmp25_ = NULL;
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ gchar** _tmp27_;
+ gint _tmp27__length1;
+ _tmp9_ = layout;
+ _tmp10_ = left_bracket;
+ _tmp11_ = string_slice (_tmp9_, (glong) 0, (glong) _tmp10_);
+ _tmp12_ = _tmp11_;
+ _tmp13_ = layout;
+ _tmp14_ = right_bracket;
+ _tmp15_ = layout;
+ _tmp16_ = strlen (_tmp15_);
+ _tmp17_ = _tmp16_;
+ _tmp18_ = string_slice (_tmp13_, (glong) (_tmp14_ + 1), (glong) _tmp17_);
+ _tmp19_ = _tmp18_;
+ _tmp20_ = g_strconcat (_tmp12_, _tmp19_, NULL);
+ _tmp21_ = layout;
+ _tmp22_ = left_bracket;
+ _tmp23_ = right_bracket;
+ _tmp24_ = string_slice (_tmp21_, (glong) (_tmp22_ + 1), (glong) _tmp23_);
+ _tmp25_ = g_new0 (gchar*, 2 + 1);
+ _tmp25_[0] = _tmp20_;
+ _tmp25_[1] = _tmp24_;
+ _tmp26_ = _tmp25_;
+ _tmp26__length1 = 2;
+ _g_free0 (_tmp19_);
+ _g_free0 (_tmp12_);
+ _tmp27_ = _tmp26_;
+ _tmp27__length1 = _tmp26__length1;
+ if (result_length1) {
+ *result_length1 = _tmp27__length1;
+ }
+ result = _tmp27_;
+ return result;
+ }
+ _tmp28_ = layout;
+ _tmp29_ = g_strdup (_tmp28_);
+ _tmp30_ = g_strdup ("default");
+ _tmp31_ = g_new0 (gchar*, 2 + 1);
+ _tmp31_[0] = _tmp29_;
+ _tmp31_[1] = _tmp30_;
+ _tmp32_ = _tmp31_;
+ _tmp32__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp32__length1;
+ }
+ result = _tmp32_;
+ return result;
+}
+
+
+gchar* xkb_layout_get_layout (XKBLayout* self) {
+ gchar* result = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ if (HAVE_IBUS_XKB) {
+ gchar* _tmp0_ = NULL;
+ _tmp0_ = xkb_layout_get_output_from_cmdline (self, "--get", "layout: ");
+ result = _tmp0_;
+ return result;
+ } else {
+ gchar* _tmp1_ = NULL;
+ _tmp1_ = xkb_layout_get_output_from_cmdline (self, "-query", "layout: ");
+ result = _tmp1_;
+ return result;
+ }
+}
+
+
+gchar* xkb_layout_get_variant (XKBLayout* self) {
+ gchar* result = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ if (HAVE_IBUS_XKB) {
+ gchar* _tmp0_ = NULL;
+ _tmp0_ = xkb_layout_get_output_from_cmdline (self, "--get", "variant: ");
+ result = _tmp0_;
+ return result;
+ } else {
+ gchar* _tmp1_ = NULL;
+ _tmp1_ = xkb_layout_get_output_from_cmdline (self, "-query", "variant: ");
+ result = _tmp1_;
+ return result;
+ }
+}
+
+
+gchar* xkb_layout_get_option (XKBLayout* self) {
+ gchar* result = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ if (HAVE_IBUS_XKB) {
+ gchar* _tmp0_ = NULL;
+ _tmp0_ = xkb_layout_get_output_from_cmdline (self, "--get", "option: ");
+ result = _tmp0_;
+ return result;
+ } else {
+ gchar* _tmp1_ = NULL;
+ _tmp1_ = xkb_layout_get_output_from_cmdline (self, "-query", "options: ");
+ result = _tmp1_;
+ return result;
+ }
+}
+
+
+static gboolean _vala_string_array_contains (gchar** stack, int stack_length, gchar* needle) {
+ int i;
+ for (i = 0; i < stack_length; i++) {
+ if (g_strcmp0 (stack[i], needle) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
+static void _vala_array_add23 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add24 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add25 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add26 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add27 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add28 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add29 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add30 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add31 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _vala_array_add32 (gchar*** array, int* length, int* size, gchar* value) {
+ if ((*length) == (*size)) {
+ *size = (*size) ? (2 * (*size)) : 4;
+ *array = g_renew (gchar*, *array, (*size) + 1);
+ }
+ (*array)[(*length)++] = value;
+ (*array)[*length] = NULL;
+}
+
+
+static void _xkb_layout_set_layout_cb_gchild_watch_func (GPid pid, gint status, gpointer self) {
+ xkb_layout_set_layout_cb (self, pid, status);
+}
+
+
+gint* xkb_layout_set_layout (XKBLayout* self, const gchar* _layout, const gchar* _variant, const gchar* _option, int* result_length1) {
+ gint* result = NULL;
+ const gchar* _tmp0_;
+ gint xkb_group_id;
+ gint changed_option;
+ GPid _tmp1_;
+ gboolean _tmp4_ = FALSE;
+ gboolean _tmp5_ = FALSE;
+ const gchar* _tmp6_;
+ gboolean _tmp8_;
+ gboolean _tmp10_;
+ const gchar* _tmp13_;
+ gchar* _tmp14_;
+ gchar* layout;
+ const gchar* _tmp15_;
+ gchar* _tmp16_;
+ gchar* variant;
+ const gchar* _tmp17_;
+ gchar* _tmp18_;
+ gchar* option;
+ const gchar* _tmp19_;
+ const gchar* _tmp29_;
+ gboolean need_us_layout;
+ gchar** _tmp39_;
+ gint _tmp39__length1;
+ gint layouts_max_length;
+ gboolean _tmp54_;
+ const gchar* _tmp56_;
+ const gchar* _tmp58_;
+ const gchar* _tmp60_;
+ const gchar* _tmp62_;
+ const gchar* _tmp83_;
+ gboolean _tmp86_ = FALSE;
+ const gchar* _tmp87_;
+ gboolean _tmp89_;
+ gboolean _tmp90_ = FALSE;
+ const gchar* _tmp91_;
+ gboolean _tmp93_;
+ const gchar* _tmp107_;
+ gboolean _tmp108_;
+ gchar** _tmp114_ = NULL;
+ gchar** args;
+ gint args_length1;
+ gint _args_size_;
+ gchar** _tmp115_;
+ gint _tmp115__length1;
+ const gchar* _tmp116_;
+ gchar* _tmp117_;
+ GPid child_pid = 0;
+ GPid _tmp153_;
+ GPid _tmp154_;
+ gint _tmp155_;
+ gint _tmp156_;
+ gint* _tmp157_ = NULL;
+ gint* _tmp158_;
+ gint _tmp158__length1;
+ GError * _inner_error_ = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (_layout != NULL, NULL);
+ g_return_val_if_fail (_variant != NULL, NULL);
+ g_return_val_if_fail (_option != NULL, NULL);
+ _tmp0_ = _layout;
+ g_assert (_tmp0_ != NULL);
+ xkb_group_id = 0;
+ changed_option = 0;
+ _tmp1_ = self->priv->m_xkb_pid;
+ if (_tmp1_ != ((GPid) (-1))) {
+ gint* _tmp2_ = NULL;
+ gint* _tmp3_;
+ gint _tmp3__length1;
+ _tmp2_ = g_new0 (gint, 2);
+ _tmp2_[0] = -1;
+ _tmp2_[1] = 0;
+ _tmp3_ = _tmp2_;
+ _tmp3__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp3__length1;
+ }
+ result = _tmp3_;
+ return result;
+ }
+ _tmp6_ = _layout;
+ if (g_strcmp0 (_tmp6_, "default") == 0) {
+ const gchar* _tmp7_;
+ _tmp7_ = _variant;
+ _tmp5_ = g_strcmp0 (_tmp7_, "default") == 0;
+ } else {
+ _tmp5_ = FALSE;
+ }
+ _tmp8_ = _tmp5_;
+ if (_tmp8_) {
+ const gchar* _tmp9_;
+ _tmp9_ = _option;
+ _tmp4_ = g_strcmp0 (_tmp9_, "default") == 0;
+ } else {
+ _tmp4_ = FALSE;
+ }
+ _tmp10_ = _tmp4_;
+ if (_tmp10_) {
+ gint* _tmp11_ = NULL;
+ gint* _tmp12_;
+ gint _tmp12__length1;
+ _tmp11_ = g_new0 (gint, 2);
+ _tmp11_[0] = -1;
+ _tmp11_[1] = 0;
+ _tmp12_ = _tmp11_;
+ _tmp12__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp12__length1;
+ }
+ result = _tmp12_;
+ return result;
+ }
+ _tmp13_ = _layout;
+ _tmp14_ = g_strdup (_tmp13_);
+ layout = _tmp14_;
+ _tmp15_ = _variant;
+ _tmp16_ = g_strdup (_tmp15_);
+ variant = _tmp16_;
+ _tmp17_ = _option;
+ _tmp18_ = g_strdup (_tmp17_);
+ option = _tmp18_;
+ _tmp19_ = variant;
+ if (g_strcmp0 (_tmp19_, "default") == 0) {
+ const gchar* _tmp20_;
+ gint _tmp21_ = 0;
+ gchar** _tmp22_ = NULL;
+ gchar** array;
+ gint array_length1;
+ gint _array_size_;
+ gchar** _tmp23_;
+ gint _tmp23__length1;
+ const gchar* _tmp24_;
+ gchar* _tmp25_;
+ gchar** _tmp26_;
+ gint _tmp26__length1;
+ const gchar* _tmp27_;
+ gchar* _tmp28_;
+ _tmp20_ = layout;
+ _tmp22_ = xkb_layout_get_variant_from_layout (self, _tmp20_, &_tmp21_);
+ array = _tmp22_;
+ array_length1 = _tmp21_;
+ _array_size_ = array_length1;
+ _tmp23_ = array;
+ _tmp23__length1 = array_length1;
+ _tmp24_ = _tmp23_[0];
+ _tmp25_ = g_strdup (_tmp24_);
+ _g_free0 (layout);
+ layout = _tmp25_;
+ _tmp26_ = array;
+ _tmp26__length1 = array_length1;
+ _tmp27_ = _tmp26_[1];
+ _tmp28_ = g_strdup (_tmp27_);
+ _g_free0 (variant);
+ variant = _tmp28_;
+ array = (_vala_array_free (array, array_length1, (GDestroyNotify) g_free), NULL);
+ }
+ _tmp29_ = option;
+ if (g_strcmp0 (_tmp29_, "default") == 0) {
+ const gchar* _tmp30_;
+ gint _tmp31_ = 0;
+ gchar** _tmp32_ = NULL;
+ gchar** array;
+ gint array_length1;
+ gint _array_size_;
+ gchar** _tmp33_;
+ gint _tmp33__length1;
+ const gchar* _tmp34_;
+ gchar* _tmp35_;
+ gchar** _tmp36_;
+ gint _tmp36__length1;
+ const gchar* _tmp37_;
+ gchar* _tmp38_;
+ _tmp30_ = layout;
+ _tmp32_ = xkb_layout_get_option_from_layout (self, _tmp30_, &_tmp31_);
+ array = _tmp32_;
+ array_length1 = _tmp31_;
+ _array_size_ = array_length1;
+ _tmp33_ = array;
+ _tmp33__length1 = array_length1;
+ _tmp34_ = _tmp33_[0];
+ _tmp35_ = g_strdup (_tmp34_);
+ _g_free0 (layout);
+ layout = _tmp35_;
+ _tmp36_ = array;
+ _tmp36__length1 = array_length1;
+ _tmp37_ = _tmp36_[1];
+ _tmp38_ = g_strdup (_tmp37_);
+ _g_free0 (option);
+ option = _tmp38_;
+ array = (_vala_array_free (array, array_length1, (GDestroyNotify) g_free), NULL);
+ }
+ need_us_layout = FALSE;
+ _tmp39_ = self->priv->m_xkb_latin_layouts;
+ _tmp39__length1 = self->priv->m_xkb_latin_layouts_length1;
+ {
+ gchar** latin_layout_collection = NULL;
+ gint latin_layout_collection_length1 = 0;
+ gint _latin_layout_collection_size_ = 0;
+ gint latin_layout_it = 0;
+ latin_layout_collection = _tmp39_;
+ latin_layout_collection_length1 = _tmp39__length1;
+ for (latin_layout_it = 0; latin_layout_it < _tmp39__length1; latin_layout_it = latin_layout_it + 1) {
+ gchar* _tmp40_;
+ gchar* latin_layout = NULL;
+ _tmp40_ = g_strdup (latin_layout_collection[latin_layout_it]);
+ latin_layout = _tmp40_;
+ {
+ gboolean _tmp41_ = FALSE;
+ const gchar* _tmp42_;
+ const gchar* _tmp43_;
+ gboolean _tmp45_;
+ gboolean _tmp46_ = FALSE;
+ const gchar* _tmp47_;
+ gboolean _tmp53_;
+ _tmp42_ = layout;
+ _tmp43_ = latin_layout;
+ if (g_strcmp0 (_tmp42_, _tmp43_) == 0) {
+ const gchar* _tmp44_;
+ _tmp44_ = variant;
+ _tmp41_ = g_strcmp0 (_tmp44_, "eng") != 0;
+ } else {
+ _tmp41_ = FALSE;
+ }
+ _tmp45_ = _tmp41_;
+ if (_tmp45_) {
+ need_us_layout = TRUE;
+ _g_free0 (latin_layout);
+ break;
+ }
+ _tmp47_ = variant;
+ if (_tmp47_ != NULL) {
+ const gchar* _tmp48_;
+ const gchar* _tmp49_;
+ gchar* _tmp50_ = NULL;
+ gchar* _tmp51_;
+ const gchar* _tmp52_;
+ _tmp48_ = layout;
+ _tmp49_ = variant;
+ _tmp50_ = g_strdup_printf ("%s(%s)", _tmp48_, _tmp49_);
+ _tmp51_ = _tmp50_;
+ _tmp52_ = latin_layout;
+ _tmp46_ = g_strcmp0 (_tmp51_, _tmp52_) == 0;
+ _g_free0 (_tmp51_);
+ } else {
+ _tmp46_ = FALSE;
+ }
+ _tmp53_ = _tmp46_;
+ if (_tmp53_) {
+ need_us_layout = TRUE;
+ _g_free0 (latin_layout);
+ break;
+ }
+ _g_free0 (latin_layout);
+ }
+ }
+ }
+ layouts_max_length = XKB_LAYOUTS_MAX_LENGTH;
+ _tmp54_ = need_us_layout;
+ if (_tmp54_) {
+ gint _tmp55_;
+ _tmp55_ = layouts_max_length;
+ layouts_max_length = _tmp55_ - 1;
+ }
+ _tmp56_ = self->priv->m_default_layout;
+ if (g_strcmp0 (_tmp56_, "") == 0) {
+ gchar* _tmp57_ = NULL;
+ _tmp57_ = xkb_layout_get_layout (self);
+ _g_free0 (self->priv->m_default_layout);
+ self->priv->m_default_layout = _tmp57_;
+ }
+ _tmp58_ = self->priv->m_default_variant;
+ if (g_strcmp0 (_tmp58_, "") == 0) {
+ gchar* _tmp59_ = NULL;
+ _tmp59_ = xkb_layout_get_variant (self);
+ _g_free0 (self->priv->m_default_variant);
+ self->priv->m_default_variant = _tmp59_;
+ }
+ _tmp60_ = self->priv->m_default_option;
+ if (g_strcmp0 (_tmp60_, "") == 0) {
+ gchar* _tmp61_ = NULL;
+ _tmp61_ = xkb_layout_get_option (self);
+ _g_free0 (self->priv->m_default_option);
+ self->priv->m_default_option = _tmp61_;
+ }
+ _tmp62_ = layout;
+ if (g_strcmp0 (_tmp62_, "default") == 0) {
+ const gchar* _tmp63_;
+ gchar* _tmp64_;
+ const gchar* _tmp65_;
+ gchar* _tmp66_;
+ _tmp63_ = self->priv->m_default_layout;
+ _tmp64_ = g_strdup (_tmp63_);
+ _g_free0 (layout);
+ layout = _tmp64_;
+ _tmp65_ = self->priv->m_default_variant;
+ _tmp66_ = g_strdup (_tmp65_);
+ _g_free0 (variant);
+ variant = _tmp66_;
+ } else {
+ if (HAVE_IBUS_GKBD) {
+ const gchar* _tmp67_;
+ const gchar* _tmp69_;
+ const gchar* _tmp70_;
+ gint _tmp71_;
+ gint _tmp72_ = 0;
+ gchar** _tmp73_ = NULL;
+ gchar** retval;
+ gint retval_length1;
+ gint _retval_size_;
+ gchar** _tmp74_;
+ gint _tmp74__length1;
+ const gchar* _tmp75_;
+ gchar* _tmp76_;
+ gchar** _tmp77_;
+ gint _tmp77__length1;
+ const gchar* _tmp78_;
+ gchar* _tmp79_;
+ gchar** _tmp80_;
+ gint _tmp80__length1;
+ const gchar* _tmp81_;
+ gint _tmp82_ = 0;
+ _tmp67_ = variant;
+ if (g_strcmp0 (_tmp67_, "default") == 0) {
+ gchar* _tmp68_;
+ _tmp68_ = g_strdup ("");
+ _g_free0 (variant);
+ variant = _tmp68_;
+ }
+ _tmp69_ = layout;
+ _tmp70_ = variant;
+ _tmp71_ = layouts_max_length;
+ _tmp73_ = xkb_layout_get_xkb_group_layout (self, _tmp69_, _tmp70_, _tmp71_, &_tmp72_);
+ retval = _tmp73_;
+ retval_length1 = _tmp72_;
+ _retval_size_ = retval_length1;
+ _tmp74_ = retval;
+ _tmp74__length1 = retval_length1;
+ _tmp75_ = _tmp74_[0];
+ _tmp76_ = g_strdup (_tmp75_);
+ _g_free0 (layout);
+ layout = _tmp76_;
+ _tmp77_ = retval;
+ _tmp77__length1 = retval_length1;
+ _tmp78_ = _tmp77_[1];
+ _tmp79_ = g_strdup (_tmp78_);
+ _g_free0 (variant);
+ variant = _tmp79_;
+ _tmp80_ = retval;
+ _tmp80__length1 = retval_length1;
+ _tmp81_ = _tmp80_[2];
+ _tmp82_ = atoi (_tmp81_);
+ xkb_group_id = _tmp82_;
+ retval = (_vala_array_free (retval, retval_length1, (GDestroyNotify) g_free), NULL);
+ }
+ }
+ _tmp83_ = layout;
+ if (g_strcmp0 (_tmp83_, "") == 0) {
+ gint* _tmp84_ = NULL;
+ gint* _tmp85_;
+ gint _tmp85__length1;
+ g_warning ("xkblayout.vala:329: Could not get the correct layout");
+ _tmp84_ = g_new0 (gint, 2);
+ _tmp84_[0] = -1;
+ _tmp84_[1] = 0;
+ _tmp85_ = _tmp84_;
+ _tmp85__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp85__length1;
+ }
+ result = _tmp85_;
+ _g_free0 (option);
+ _g_free0 (variant);
+ _g_free0 (layout);
+ return result;
+ }
+ _tmp87_ = variant;
+ if (g_strcmp0 (_tmp87_, "default") == 0) {
+ _tmp86_ = TRUE;
+ } else {
+ const gchar* _tmp88_;
+ _tmp88_ = variant;
+ _tmp86_ = g_strcmp0 (_tmp88_, "") == 0;
+ }
+ _tmp89_ = _tmp86_;
+ if (_tmp89_) {
+ _g_free0 (variant);
+ variant = NULL;
+ }
+ _tmp91_ = option;
+ if (g_strcmp0 (_tmp91_, "default") == 0) {
+ _tmp90_ = TRUE;
+ } else {
+ const gchar* _tmp92_;
+ _tmp92_ = option;
+ _tmp90_ = g_strcmp0 (_tmp92_, "") == 0;
+ }
+ _tmp93_ = _tmp90_;
+ if (_tmp93_) {
+ const gchar* _tmp94_;
+ gchar* _tmp95_;
+ _tmp94_ = self->priv->m_default_option;
+ _tmp95_ = g_strdup (_tmp94_);
+ _g_free0 (option);
+ option = _tmp95_;
+ } else {
+ const gchar* _tmp96_;
+ const gchar* _tmp97_;
+ gchar** _tmp98_;
+ gchar** _tmp99_ = NULL;
+ gchar** _tmp100_;
+ gint _tmp100__length1;
+ gboolean _tmp101_;
+ _tmp96_ = option;
+ _tmp97_ = self->priv->m_default_option;
+ _tmp99_ = _tmp98_ = g_strsplit (_tmp97_, ",", 0);
+ _tmp100_ = _tmp99_;
+ _tmp100__length1 = _vala_array_length (_tmp98_);
+ _tmp101_ = !_vala_string_array_contains (_tmp100_, _vala_array_length (_tmp98_), _tmp96_);
+ _tmp100_ = (_vala_array_free (_tmp100_, _tmp100__length1, (GDestroyNotify) g_free), NULL);
+ if (_tmp101_) {
+ const gchar* _tmp102_;
+ const gchar* _tmp103_;
+ gchar* _tmp104_ = NULL;
+ _tmp102_ = self->priv->m_default_option;
+ _tmp103_ = option;
+ _tmp104_ = g_strdup_printf ("%s,%s", _tmp102_, _tmp103_);
+ _g_free0 (option);
+ option = _tmp104_;
+ changed_option = 1;
+ } else {
+ const gchar* _tmp105_;
+ gchar* _tmp106_;
+ _tmp105_ = self->priv->m_default_option;
+ _tmp106_ = g_strdup (_tmp105_);
+ _g_free0 (option);
+ option = _tmp106_;
+ }
+ }
+ _tmp107_ = option;
+ if (g_strcmp0 (_tmp107_, "") == 0) {
+ _g_free0 (option);
+ option = NULL;
+ }
+ _tmp108_ = need_us_layout;
+ if (_tmp108_) {
+ const gchar* _tmp109_;
+ gchar* _tmp110_;
+ const gchar* _tmp111_;
+ _tmp109_ = layout;
+ _tmp110_ = g_strconcat (_tmp109_, ",us", NULL);
+ _g_free0 (layout);
+ layout = _tmp110_;
+ _tmp111_ = variant;
+ if (_tmp111_ != NULL) {
+ const gchar* _tmp112_;
+ gchar* _tmp113_;
+ _tmp112_ = variant;
+ _tmp113_ = g_strconcat (_tmp112_, ",", NULL);
+ _g_free0 (variant);
+ variant = _tmp113_;
+ }
+ }
+ _tmp114_ = g_new0 (gchar*, 0 + 1);
+ args = _tmp114_;
+ args_length1 = 0;
+ _args_size_ = args_length1;
+ _tmp115_ = args;
+ _tmp115__length1 = args_length1;
+ _tmp116_ = self->priv->m_xkb_command;
+ _tmp117_ = g_strdup (_tmp116_);
+ _vala_array_add23 (&args, &args_length1, &_args_size_, _tmp117_);
+ if (HAVE_IBUS_XKB) {
+ gchar** _tmp118_;
+ gint _tmp118__length1;
+ gchar* _tmp119_;
+ gchar** _tmp120_;
+ gint _tmp120__length1;
+ const gchar* _tmp121_;
+ gchar* _tmp122_;
+ const gchar* _tmp123_;
+ const gchar* _tmp129_;
+ _tmp118_ = args;
+ _tmp118__length1 = args_length1;
+ _tmp119_ = g_strdup ("--layout");
+ _vala_array_add24 (&args, &args_length1, &_args_size_, _tmp119_);
+ _tmp120_ = args;
+ _tmp120__length1 = args_length1;
+ _tmp121_ = layout;
+ _tmp122_ = g_strdup (_tmp121_);
+ _vala_array_add25 (&args, &args_length1, &_args_size_, _tmp122_);
+ _tmp123_ = variant;
+ if (_tmp123_ != NULL) {
+ gchar** _tmp124_;
+ gint _tmp124__length1;
+ gchar* _tmp125_;
+ gchar** _tmp126_;
+ gint _tmp126__length1;
+ const gchar* _tmp127_;
+ gchar* _tmp128_;
+ _tmp124_ = args;
+ _tmp124__length1 = args_length1;
+ _tmp125_ = g_strdup ("--variant");
+ _vala_array_add26 (&args, &args_length1, &_args_size_, _tmp125_);
+ _tmp126_ = args;
+ _tmp126__length1 = args_length1;
+ _tmp127_ = variant;
+ _tmp128_ = g_strdup (_tmp127_);
+ _vala_array_add27 (&args, &args_length1, &_args_size_, _tmp128_);
+ }
+ _tmp129_ = option;
+ if (_tmp129_ != NULL) {
+ gchar** _tmp130_;
+ gint _tmp130__length1;
+ gchar* _tmp131_;
+ gchar** _tmp132_;
+ gint _tmp132__length1;
+ const gchar* _tmp133_;
+ gchar* _tmp134_;
+ _tmp130_ = args;
+ _tmp130__length1 = args_length1;
+ _tmp131_ = g_strdup ("--option");
+ _vala_array_add28 (&args, &args_length1, &_args_size_, _tmp131_);
+ _tmp132_ = args;
+ _tmp132__length1 = args_length1;
+ _tmp133_ = option;
+ _tmp134_ = g_strdup (_tmp133_);
+ _vala_array_add29 (&args, &args_length1, &_args_size_, _tmp134_);
+ }
+ } else {
+ gchar** _tmp135_;
+ gint _tmp135__length1;
+ const gchar* _tmp136_;
+ gchar* _tmp137_;
+ const gchar* _tmp138_;
+ const gchar* _tmp142_;
+ _tmp135_ = args;
+ _tmp135__length1 = args_length1;
+ _tmp136_ = layout;
+ _tmp137_ = g_strdup (_tmp136_);
+ _vala_array_add30 (&args, &args_length1, &_args_size_, _tmp137_);
+ _tmp138_ = variant;
+ if (_tmp138_ != NULL) {
+ gchar** _tmp139_;
+ gint _tmp139__length1;
+ const gchar* _tmp140_;
+ gchar* _tmp141_;
+ _tmp139_ = args;
+ _tmp139__length1 = args_length1;
+ _tmp140_ = variant;
+ _tmp141_ = g_strdup (_tmp140_);
+ _vala_array_add31 (&args, &args_length1, &_args_size_, _tmp141_);
+ }
+ _tmp142_ = option;
+ if (_tmp142_ != NULL) {
+ gchar** _tmp143_;
+ gint _tmp143__length1;
+ const gchar* _tmp144_;
+ gchar* _tmp145_;
+ _tmp143_ = args;
+ _tmp143__length1 = args_length1;
+ _tmp144_ = option;
+ _tmp145_ = g_strdup (_tmp144_);
+ _vala_array_add32 (&args, &args_length1, &_args_size_, _tmp145_);
+ }
+ }
+ {
+ gchar** _tmp146_;
+ gint _tmp146__length1;
+ GPid _tmp147_ = 0;
+ _tmp146_ = args;
+ _tmp146__length1 = args_length1;
+ g_spawn_async (NULL, _tmp146_, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &_tmp147_, &_inner_error_);
+ child_pid = _tmp147_;
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_SPAWN_ERROR) {
+ goto __catch4_g_spawn_error;
+ }
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (option);
+ _g_free0 (variant);
+ _g_free0 (layout);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+ }
+ goto __finally4;
+ __catch4_g_spawn_error:
+ {
+ GError* err = NULL;
+ FILE* _tmp148_;
+ GError* _tmp149_;
+ const gchar* _tmp150_;
+ gint* _tmp151_ = NULL;
+ gint* _tmp152_;
+ gint _tmp152__length1;
+ err = _inner_error_;
+ _inner_error_ = NULL;
+ _tmp148_ = stderr;
+ _tmp149_ = err;
+ _tmp150_ = _tmp149_->message;
+ fprintf (_tmp148_, "IBUS_ERROR: %s\n", _tmp150_);
+ _tmp151_ = g_new0 (gint, 2);
+ _tmp151_[0] = -1;
+ _tmp151_[1] = 0;
+ _tmp152_ = _tmp151_;
+ _tmp152__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp152__length1;
+ }
+ result = _tmp152_;
+ _g_error_free0 (err);
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (option);
+ _g_free0 (variant);
+ _g_free0 (layout);
+ return result;
+ }
+ __finally4:
+ if (_inner_error_ != NULL) {
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (option);
+ _g_free0 (variant);
+ _g_free0 (layout);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return NULL;
+ }
+ _tmp153_ = child_pid;
+ self->priv->m_xkb_pid = _tmp153_;
+ _tmp154_ = self->priv->m_xkb_pid;
+ g_child_watch_add_full (G_PRIORITY_DEFAULT_IDLE, _tmp154_, _xkb_layout_set_layout_cb_gchild_watch_func, xkb_layout_ref (self), xkb_layout_unref);
+ _tmp155_ = xkb_group_id;
+ _tmp156_ = changed_option;
+ _tmp157_ = g_new0 (gint, 2);
+ _tmp157_[0] = _tmp155_;
+ _tmp157_[1] = _tmp156_;
+ _tmp158_ = _tmp157_;
+ _tmp158__length1 = 2;
+ if (result_length1) {
+ *result_length1 = _tmp158__length1;
+ }
+ result = _tmp158_;
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (option);
+ _g_free0 (variant);
+ _g_free0 (layout);
+ return result;
+}
+
+
+static void _xkb_layout_set_xmodmap_cb_gchild_watch_func (GPid pid, gint status, gpointer self) {
+ xkb_layout_set_xmodmap_cb (self, pid, status);
+}
+
+
+void xkb_layout_set_xmodmap (XKBLayout* self) {
+ gboolean _tmp0_;
+ GPid _tmp1_;
+ const gchar* _tmp2_;
+ gchar* _tmp3_ = NULL;
+ gchar* xmodmap_cmdpath;
+ const gchar* _tmp4_;
+ const gchar* _tmp7_ = NULL;
+ gchar* _tmp8_;
+ gchar* homedir;
+ gchar** _tmp9_;
+ gint _tmp9__length1;
+ GError * _inner_error_ = NULL;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = self->priv->m_use_xmodmap;
+ if (!_tmp0_) {
+ return;
+ }
+ _tmp1_ = self->priv->m_xmodmap_pid;
+ if (_tmp1_ != ((GPid) (-1))) {
+ return;
+ }
+ _tmp2_ = self->priv->m_xmodmap_command;
+ _tmp3_ = xkb_layout_get_fullpath (self, _tmp2_);
+ xmodmap_cmdpath = _tmp3_;
+ _tmp4_ = xmodmap_cmdpath;
+ if (g_strcmp0 (_tmp4_, "") == 0) {
+ const gchar* _tmp5_;
+ gchar* _tmp6_;
+ _tmp5_ = self->priv->m_xmodmap_command;
+ _tmp6_ = g_strdup (_tmp5_);
+ _g_free0 (xmodmap_cmdpath);
+ xmodmap_cmdpath = _tmp6_;
+ }
+ _tmp7_ = g_get_home_dir ();
+ _tmp8_ = g_strdup (_tmp7_);
+ homedir = _tmp8_;
+ _tmp9_ = self->priv->m_xmodmap_known_files;
+ _tmp9__length1 = self->priv->m_xmodmap_known_files_length1;
+ {
+ gchar** xmodmap_file_collection = NULL;
+ gint xmodmap_file_collection_length1 = 0;
+ gint _xmodmap_file_collection_size_ = 0;
+ gint xmodmap_file_it = 0;
+ xmodmap_file_collection = _tmp9_;
+ xmodmap_file_collection_length1 = _tmp9__length1;
+ for (xmodmap_file_it = 0; xmodmap_file_it < _tmp9__length1; xmodmap_file_it = xmodmap_file_it + 1) {
+ gchar* _tmp10_;
+ gchar* xmodmap_file = NULL;
+ _tmp10_ = g_strdup (xmodmap_file_collection[xmodmap_file_it]);
+ xmodmap_file = _tmp10_;
+ {
+ const gchar* _tmp11_;
+ const gchar* _tmp12_;
+ gchar* _tmp13_ = NULL;
+ gchar* xmodmap_filepath;
+ const gchar* _tmp14_;
+ gboolean _tmp15_ = FALSE;
+ const gchar* _tmp16_;
+ gchar* _tmp17_;
+ const gchar* _tmp18_;
+ gchar* _tmp19_;
+ gchar** _tmp20_ = NULL;
+ gchar** args;
+ gint args_length1;
+ gint _args_size_;
+ GPid child_pid = 0;
+ GPid _tmp26_;
+ GPid _tmp27_;
+ _tmp11_ = homedir;
+ _tmp12_ = xmodmap_file;
+ _tmp13_ = g_build_filename (_tmp11_, _tmp12_, NULL);
+ xmodmap_filepath = _tmp13_;
+ _tmp14_ = xmodmap_filepath;
+ _tmp15_ = g_file_test (_tmp14_, G_FILE_TEST_EXISTS);
+ if (!_tmp15_) {
+ _g_free0 (xmodmap_filepath);
+ _g_free0 (xmodmap_file);
+ continue;
+ }
+ _tmp16_ = xmodmap_cmdpath;
+ _tmp17_ = g_strdup (_tmp16_);
+ _tmp18_ = xmodmap_filepath;
+ _tmp19_ = g_strdup (_tmp18_);
+ _tmp20_ = g_new0 (gchar*, 2 + 1);
+ _tmp20_[0] = _tmp17_;
+ _tmp20_[1] = _tmp19_;
+ args = _tmp20_;
+ args_length1 = 2;
+ _args_size_ = args_length1;
+ {
+ gchar** _tmp21_;
+ gint _tmp21__length1;
+ GPid _tmp22_ = 0;
+ _tmp21_ = args;
+ _tmp21__length1 = args_length1;
+ g_spawn_async (NULL, _tmp21_, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &_tmp22_, &_inner_error_);
+ child_pid = _tmp22_;
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_SPAWN_ERROR) {
+ goto __catch5_g_spawn_error;
+ }
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (xmodmap_filepath);
+ _g_free0 (xmodmap_file);
+ _g_free0 (homedir);
+ _g_free0 (xmodmap_cmdpath);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ }
+ goto __finally5;
+ __catch5_g_spawn_error:
+ {
+ GError* err = NULL;
+ FILE* _tmp23_;
+ GError* _tmp24_;
+ const gchar* _tmp25_;
+ err = _inner_error_;
+ _inner_error_ = NULL;
+ _tmp23_ = stderr;
+ _tmp24_ = err;
+ _tmp25_ = _tmp24_->message;
+ fprintf (_tmp23_, "IBUS_ERROR: %s\n", _tmp25_);
+ _g_error_free0 (err);
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (xmodmap_filepath);
+ _g_free0 (xmodmap_file);
+ _g_free0 (homedir);
+ _g_free0 (xmodmap_cmdpath);
+ return;
+ }
+ __finally5:
+ if (_inner_error_ != NULL) {
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (xmodmap_filepath);
+ _g_free0 (xmodmap_file);
+ _g_free0 (homedir);
+ _g_free0 (xmodmap_cmdpath);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ _tmp26_ = child_pid;
+ self->priv->m_xmodmap_pid = _tmp26_;
+ _tmp27_ = self->priv->m_xmodmap_pid;
+ g_child_watch_add_full (G_PRIORITY_DEFAULT_IDLE, _tmp27_, _xkb_layout_set_xmodmap_cb_gchild_watch_func, xkb_layout_ref (self), xkb_layout_unref);
+ args = (_vala_array_free (args, args_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (xmodmap_filepath);
+ _g_free0 (xmodmap_file);
+ break;
+ }
+ }
+ }
+ _g_free0 (homedir);
+ _g_free0 (xmodmap_cmdpath);
+}
+
+
+void xkb_layout_reset_layout (XKBLayout* self) {
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ g_return_if_fail (self != NULL);
+ _tmp0_ = xkb_layout_get_layout (self);
+ _g_free0 (self->priv->m_default_layout);
+ self->priv->m_default_layout = _tmp0_;
+ _tmp1_ = xkb_layout_get_variant (self);
+ _g_free0 (self->priv->m_default_variant);
+ self->priv->m_default_variant = _tmp1_;
+ _tmp2_ = xkb_layout_get_option (self);
+ _g_free0 (self->priv->m_default_option);
+ self->priv->m_default_option = _tmp2_;
+}
+
+
+static void value_xkb_layout_init (GValue* value) {
+ value->data[0].v_pointer = NULL;
+}
+
+
+static void value_xkb_layout_free_value (GValue* value) {
+ if (value->data[0].v_pointer) {
+ xkb_layout_unref (value->data[0].v_pointer);
+ }
+}
+
+
+static void value_xkb_layout_copy_value (const GValue* src_value, GValue* dest_value) {
+ if (src_value->data[0].v_pointer) {
+ dest_value->data[0].v_pointer = xkb_layout_ref (src_value->data[0].v_pointer);
+ } else {
+ dest_value->data[0].v_pointer = NULL;
+ }
+}
+
+
+static gpointer value_xkb_layout_peek_pointer (const GValue* value) {
+ return value->data[0].v_pointer;
+}
+
+
+static gchar* value_xkb_layout_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ if (collect_values[0].v_pointer) {
+ XKBLayout* object;
+ object = collect_values[0].v_pointer;
+ if (object->parent_instance.g_class == NULL) {
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ }
+ value->data[0].v_pointer = xkb_layout_ref (object);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ return NULL;
+}
+
+
+static gchar* value_xkb_layout_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ XKBLayout** object_p;
+ object_p = collect_values[0].v_pointer;
+ if (!object_p) {
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+ }
+ if (!value->data[0].v_pointer) {
+ *object_p = NULL;
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+ *object_p = value->data[0].v_pointer;
+ } else {
+ *object_p = xkb_layout_ref (value->data[0].v_pointer);
+ }
+ return NULL;
+}
+
+
+GParamSpec* param_spec_xkb_layout (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecXKBLayout* spec;
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_XKB_LAYOUT), NULL);
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+ G_PARAM_SPEC (spec)->value_type = object_type;
+ return G_PARAM_SPEC (spec);
+}
+
+
+gpointer value_get_xkb_layout (const GValue* value) {
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_XKB_LAYOUT), NULL);
+ return value->data[0].v_pointer;
+}
+
+
+void value_set_xkb_layout (GValue* value, gpointer v_object) {
+ XKBLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_XKB_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_XKB_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ xkb_layout_ref (value->data[0].v_pointer);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ xkb_layout_unref (old);
+ }
+}
+
+
+void value_take_xkb_layout (GValue* value, gpointer v_object) {
+ XKBLayout* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_XKB_LAYOUT));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_XKB_LAYOUT));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ xkb_layout_unref (old);
+ }
+}
+
+
+static void xkb_layout_class_init (XKBLayoutClass * klass) {
+ xkb_layout_parent_class = g_type_class_peek_parent (klass);
+ XKB_LAYOUT_CLASS (klass)->finalize = xkb_layout_finalize;
+ g_type_class_add_private (klass, sizeof (XKBLayoutPrivate));
+}
+
+
+static void xkb_layout_instance_init (XKBLayout * self) {
+ gchar* _tmp0_;
+ gchar** _tmp1_ = NULL;
+ gchar* _tmp2_;
+ gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* _tmp5_;
+ gchar* _tmp6_;
+ gchar** _tmp7_ = NULL;
+ gchar* _tmp8_;
+ gchar* _tmp9_;
+ gchar* _tmp10_;
+ self->priv = XKB_LAYOUT_GET_PRIVATE (self);
+ _tmp0_ = g_strdup (IBUS_XKB_COMMAND);
+ self->priv->m_xkb_command = _tmp0_;
+ self->priv->m_config = NULL;
+ _tmp1_ = g_new0 (gchar*, 0 + 1);
+ self->priv->m_xkb_latin_layouts = _tmp1_;
+ self->priv->m_xkb_latin_layouts_length1 = 0;
+ self->priv->_m_xkb_latin_layouts_size_ = self->priv->m_xkb_latin_layouts_length1;
+ self->priv->m_xkb_pid = (GPid) (-1);
+ self->priv->m_xmodmap_pid = (GPid) (-1);
+ _tmp2_ = g_strdup ("xmodmap");
+ self->priv->m_xmodmap_command = _tmp2_;
+ self->priv->m_use_xmodmap = TRUE;
+ _tmp3_ = g_strdup (".xmodmap");
+ _tmp4_ = g_strdup (".xmodmaprc");
+ _tmp5_ = g_strdup (".Xmodmap");
+ _tmp6_ = g_strdup (".Xmodmaprc");
+ _tmp7_ = g_new0 (gchar*, 4 + 1);
+ _tmp7_[0] = _tmp3_;
+ _tmp7_[1] = _tmp4_;
+ _tmp7_[2] = _tmp5_;
+ _tmp7_[3] = _tmp6_;
+ self->priv->m_xmodmap_known_files = _tmp7_;
+ self->priv->m_xmodmap_known_files_length1 = 4;
+ self->priv->_m_xmodmap_known_files_size_ = self->priv->m_xmodmap_known_files_length1;
+ _tmp8_ = g_strdup ("");
+ self->priv->m_default_layout = _tmp8_;
+ _tmp9_ = g_strdup ("");
+ self->priv->m_default_variant = _tmp9_;
+ _tmp10_ = g_strdup ("");
+ self->priv->m_default_option = _tmp10_;
+ self->ref_count = 1;
+}
+
+
+static void xkb_layout_finalize (XKBLayout* obj) {
+ XKBLayout * self;
+ self = XKB_LAYOUT (obj);
+ _g_free0 (self->priv->m_xkb_command);
+ _g_object_unref0 (self->priv->m_config);
+ self->priv->m_xkb_latin_layouts = (_vala_array_free (self->priv->m_xkb_latin_layouts, self->priv->m_xkb_latin_layouts_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (self->priv->m_xmodmap_command);
+ self->priv->m_xmodmap_known_files = (_vala_array_free (self->priv->m_xmodmap_known_files, self->priv->m_xmodmap_known_files_length1, (GDestroyNotify) g_free), NULL);
+ _g_free0 (self->priv->m_default_layout);
+ _g_free0 (self->priv->m_default_variant);
+ _g_free0 (self->priv->m_default_option);
+}
+
+
+GType xkb_layout_get_type (void) {
+ static volatile gsize xkb_layout_type_id__volatile = 0;
+ if (g_once_init_enter (&xkb_layout_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_xkb_layout_init, value_xkb_layout_free_value, value_xkb_layout_copy_value, value_xkb_layout_peek_pointer, "p", value_xkb_layout_collect_value, "p", value_xkb_layout_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (XKBLayoutClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) xkb_layout_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (XKBLayout), 0, (GInstanceInitFunc) xkb_layout_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType xkb_layout_type_id;
+ xkb_layout_type_id = g_type_register_fundamental (g_type_fundamental_next (), "XKBLayout", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&xkb_layout_type_id__volatile, xkb_layout_type_id);
+ }
+ return xkb_layout_type_id__volatile;
+}
+
+
+gpointer xkb_layout_ref (gpointer instance) {
+ XKBLayout* self;
+ self = instance;
+ g_atomic_int_inc (&self->ref_count);
+ return instance;
+}
+
+
+void xkb_layout_unref (gpointer instance) {
+ XKBLayout* self;
+ self = instance;
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ XKB_LAYOUT_GET_CLASS (self)->finalize (self);
+ g_type_free_instance ((GTypeInstance *) self);
+ }
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+