[心得] scim-array on openSUSE 12.3
最近將 openSUSE 升到 12.3,發現 scim-array 會編譯失敗
看錯誤的訊息,是因為 Gtk+ API 的變動所造成的影響。
我自己修改以後,確定可以編譯成功並且可以使用,我參考 Gtk+ 的文
件以後,使用 GTK_CHECK_VERSION 區隔開不同版本間的 API,但是
我只能確定在 openSUSE 12.3 上是 work 的 @@
下面是修改的地方:
--- scim-array-1.0.1/src/scim_array_imengine_setup.cpp 2008-05-03 20:47:46.000000000 +0800
+++ scim-array-1.0.1-patch/src/scim_array_imengine_setup.cpp 2013-03-31 07:01:09.000000000 +0800
@@ -149,58 +149,104 @@ static void
on_default_key_selection_clicked (GtkButton *button,
gpointer user_data);
+
+#if GTK_CHECK_VERSION(2,12,0)
+static GtkWidget *
+create_options_page();
+#else
static GtkWidget *
create_options_page(GtkTooltips *tooltip);
-
+#endif
// Function implementations.
+#if GTK_CHECK_VERSION(2,12,0)
static GtkWidget *
-create_options_page(GtkTooltips *tooltips)
+create_options_page()
+#else
+static GtkWidget *
+create_options_page(GtkTooltips *tooltip);
+#endif
{
GtkWidget *vbox;
GtkWidget *button;
+#if GTK_CHECK_VERSION(3,2,0)
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
+#else
vbox = gtk_vbox_new (FALSE, 12);
+#endif
gtk_container_set_border_width(GTK_CONTAINER(vbox), 12);
button = gtk_check_button_new_with_mnemonic (_("Show Special Code"));
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+#if GTK_CHECK_VERSION(2,12,0)
+ gtk_widget_set_tooltip_text(button,
+ _("To notify if the character has the special code"));
+#else
gtk_tooltips_set_tip(tooltips, button,
_("To notify if the character has the special code"), NULL);
+#endif
g_signal_connect(G_OBJECT(button), "toggled",
G_CALLBACK(on_default_toggle_button_toggled), NULL);
show_special_code_button = button;
button = gtk_check_button_new_with_mnemonic(_("Only Special Code Input Mode"));
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+#if GTK_CHECK_VERSION(2,12,0)
+ gtk_widget_set_tooltip_text(button,
+ _("If the character has the special code, you will be confined to use it"));
+#else
gtk_tooltips_set_tip(tooltips, button,
_("If the character has the special code, you will be confined to use it"), NULL);
+#endif
g_signal_connect(G_OBJECT(button), "toggled",
G_CALLBACK(on_default_toggle_button_toggled), NULL);
special_code_only_button = button;
button = gtk_check_button_new_with_mnemonic(_("Use Phrase Library"));
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+#if GTK_CHECK_VERSION(2,12,0)
+ gtk_widget_set_tooltip_text(button,
+ _("Turn on phrase input mode. (Enable after restart)"));
+#else
gtk_tooltips_set_tip(tooltips, button,
_("Turn on phrase input mode. (Enable after restart)"), NULL);
+#endif
g_signal_connect(G_OBJECT(button), "toggled",
G_CALLBACK(on_default_toggle_button_toggled), NULL);
phrases_library_button = button;
+#if GTK_CHECK_VERSION(3,4,0)
+ GtkWidget *table = gtk_grid_new();
+#else
GtkWidget *table = gtk_table_new ( 2, 2, TRUE );
+#endif
+
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, TRUE, 0);
GtkWidget *label = gtk_label_new(_("En/Ch Mode Switch Key"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_padding (GTK_MISC (label), 4, 0);
+#if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), label, 0, 1, 0, 1);
+#else
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (GTK_FILL), 4, 4);
+ (GtkAttachOptions) (GTK_FILL), 4, 4);
+#endif
+#if GTK_CHECK_VERSION(3,2,0)
+ GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
+#else
GtkWidget *hbox = gtk_hbox_new(FALSE, 12);
+#endif
GtkWidget *entry = gtk_entry_new();
+#if GTK_CHECK_VERSION(2,0,0)
+ gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
+#else
gtk_entry_set_editable (GTK_ENTRY (entry), FALSE);
+#endif
gtk_entry_set_text (GTK_ENTRY (entry), "");
gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 0);
g_signal_connect(G_OBJECT(entry), "changed",
@@ -212,19 +258,35 @@ create_options_page(GtkTooltips *tooltip
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK (on_default_key_selection_clicked),
ec_change_key_text);
+#if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), hbox, 1, 2, 0, 1);
+#else
gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 0, 1);
+#endif
label = gtk_label_new(_("Half/Full Width Mode Switch Key"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_padding (GTK_MISC (label), 4, 0);
+#if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), label, 0, 1, 1, 2);
+#else
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 4, 4);
+#endif
+#if GTK_CHECK_VERSION(3,2,0)
+ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
+#else
hbox = gtk_hbox_new(FALSE, 12);
+#endif
entry = gtk_entry_new();
+#if GTK_CHECK_VERSION(2,0,0)
+ gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
+#else
gtk_entry_set_editable (GTK_ENTRY (entry), FALSE);
+#endif
gtk_entry_set_text (GTK_ENTRY (entry), "");
gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 0);
g_signal_connect(G_OBJECT(entry), "changed",
@@ -248,15 +310,25 @@ create_setup_window ()
GtkWidget *notebook;
GtkWidget *label;
GtkWidget *page;
+#if GTK_CHECK_VERSION(2,12,0)
+#else
GtkTooltips *tooltips;
+#endif
+#if GTK_CHECK_VERSION(2,12,0)
+#else
tooltips = gtk_tooltips_new ();
+#endif
// Create the Notebook.
notebook = gtk_notebook_new ();
// Create the first page.
+#if GTK_CHECK_VERSION(2,12,0)
+ page = create_options_page();
+#else
page = create_options_page(tooltips);
+#endif
label = gtk_label_new (_("Options"));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
修改以後的檔案 (source code):
https://sites.google.com/site/ray2501/
scim-array-patch/scim-array-1.0.1-patch.zip?attredirects=0&d=1
Diff 檔:
https://sites.google.com/site/ray2501/
scim-array-patch/scim_array_imengine_setup.diff?attredirects=0&d=1
上面的連結請二行合成一行。
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.69.56
Array 近期熱門文章
PTT數位生活區 即時熱門文章