diff --git a/kasumi-2.5-c++14.patch b/kasumi-2.5-c++14.patch new file mode 100644 index 0000000..878353a --- /dev/null +++ b/kasumi-2.5-c++14.patch @@ -0,0 +1,15 @@ +--- + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/configure.in ++++ b/configure.in +@@ -36,7 +36,7 @@ AC_CHECK_LIB(anthydic, anthy_dic_util_in + AC_CHECK_LIB(anthy, anthy_get_version_string) + + CFLAGS="$CFLAGS -Wall" +-CXXFLAGS="$CXXFLAGS -Wall" ++CXXFLAGS="$CXXFLAGS -Wall -std=c++14" + + dnl Checks for header files. + diff --git a/kasumi-2.5-configure-gtk3.patch b/kasumi-2.5-configure-gtk3.patch new file mode 100644 index 0000000..112732f --- /dev/null +++ b/kasumi-2.5-configure-gtk3.patch @@ -0,0 +1,18 @@ +--- + configure.in | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/configure.in ++++ b/configure.in +@@ -27,7 +27,10 @@ if test "x$am_cv_func_iconv" != "xyes"; + fi + + dnl Checks for libraries. +-AM_PATH_GTK_2_0(2.6.0, CFLAGS="$CFLAGS $GTK_CFLAGS" CPPFLAGS="$CPPFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS", AC_MSG_ERROR(GTK+ >= 2.6.0 not found.)) ++PKG_CHECK_MODULES([GTK], [gtk+-3.0]) ++CFLAGS="$CFLAGS $GTK_CFLAGS" ++CPPFLAGS="$CPPFLAGS $GTK_CFLAGS" ++LIBS="$LIBS $GTK_LIBS" + AC_CHECK_LIB(iconv, iconv) + AC_CHECK_LIB(anthydic, anthy_dic_util_init) + AC_CHECK_LIB(anthy, anthy_get_version_string) diff --git a/kasumi-2.5-gtk3.patch b/kasumi-2.5-gtk3.patch new file mode 100644 index 0000000..07a608a --- /dev/null +++ b/kasumi-2.5-gtk3.patch @@ -0,0 +1,369 @@ +From 9de5eb6d221bf3438c75a756c9acffa01e2c51fb Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Tue, 16 Feb 2021 07:45:51 +0900 +Subject: [PATCH] Migrate kasumi GUI to GTK3 + +--- + KasumiAddWindow.cxx | 41 ++++++++++------------ + KasumiAddWindow.hxx | 1 - + KasumiMainWindow.cxx | 82 ++++++++++++++++++++++---------------------- + cellrendererspin.c | 16 +++++---- + cellrendererspin.h | 2 +- + main.cxx | 15 ++++---- + 6 files changed, 79 insertions(+), 78 deletions(-) + +diff --git a/KasumiAddWindow.cxx b/KasumiAddWindow.cxx +index 9b42c12..49c6a05 100644 +--- a/KasumiAddWindow.cxx ++++ b/KasumiAddWindow.cxx +@@ -59,9 +59,6 @@ KasumiAddWindow::KasumiAddWindow(KasumiDic *aDictionary, + g_signal_connect(G_OBJECT(window), "delete_event", + G_CALLBACK(_call_back_add_window_delete_event), this); + +- // tooltips for every widget +- Tooltips = gtk_tooltips_new(); +- + // creating vbox for text entries, spin button and so on. + GtkWidget *vbox = gtk_vbox_new(FALSE,0); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); +@@ -111,12 +108,12 @@ KasumiAddWindow::KasumiAddWindow(KasumiDic *aDictionary, + const int FREQ_DEFAULT = conf->getPropertyValueByInt("DefaultFrequency"); + const int FREQ_LBOUND = conf->getPropertyValueByInt("MinFrequency"); + const int FREQ_UBOUND = conf->getPropertyValueByInt("MaxFrequency"); +- GtkObject *adjustment = gtk_adjustment_new(FREQ_DEFAULT, +- FREQ_LBOUND, +- FREQ_UBOUND, +- 1, +- FREQ_UBOUND / 100 +- ,0); ++ GtkAdjustment *adjustment = GTK_ADJUSTMENT (gtk_adjustment_new(FREQ_DEFAULT, ++ FREQ_LBOUND, ++ FREQ_UBOUND, ++ 1, ++ FREQ_UBOUND / 100 ++ ,0)); + FrequencySpin = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment),1.0,0); + alignment = gtk_alignment_new(0, 0.5, 1.0, 1.0); + gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 6, 6, 6); +@@ -205,16 +202,14 @@ KasumiAddWindow::KasumiAddWindow(KasumiDic *aDictionary, + gtk_box_pack_start(GTK_BOX(hbutton_box),GTK_WIDGET(button),TRUE,TRUE,0); + g_signal_connect(G_OBJECT(button),"clicked", + G_CALLBACK(_call_back_add_window_add),this); +- gtk_tooltips_set_tip(Tooltips, button, +- _("Add entered word and quit registration."), ++ gtk_widget_set_tooltip_text(button, + _("If all the necessary items are filled in, add entered word and quit registration.")); + + button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(hbutton_box),GTK_WIDGET(button),TRUE,TRUE,0); + g_signal_connect(G_OBJECT(button),"clicked", + G_CALLBACK(_call_back_add_window_quit),this); +- gtk_tooltips_set_tip(Tooltips, button, +- _("Cancel registration and quit."), ++ gtk_widget_set_tooltip_text(button, + _("Cancel registration and quit.")); + + gtk_window_set_keep_above(GTK_WINDOW(window), TRUE); +@@ -227,24 +222,21 @@ KasumiAddWindow::KasumiAddWindow(KasumiDic *aDictionary, + gtk_box_pack_start(GTK_BOX(hbutton_box),GTK_WIDGET(button),TRUE,TRUE,0); + g_signal_connect(G_OBJECT(button),"clicked", + G_CALLBACK(_call_back_add_window_add),this); +- gtk_tooltips_set_tip(Tooltips, button, +- _("Add entered word"), ++ gtk_widget_set_tooltip_text(button, + _("If all the necessary items are filled in, add entered word.")); + + button = gtk_button_new_from_stock(GTK_STOCK_EDIT); + gtk_box_pack_start(GTK_BOX(hbutton_box),GTK_WIDGET(button),TRUE,TRUE,0); + g_signal_connect(G_OBJECT(button),"clicked", + G_CALLBACK(_call_back_manage_mode),this); +- gtk_tooltips_set_tip(Tooltips, button, +- _("Manage mode"), ++ gtk_widget_set_tooltip_text(button, + _("Make the shift to manage mode to modify and remove registered words.")); + + button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_box_pack_start(GTK_BOX(hbutton_box),GTK_WIDGET(button),TRUE,TRUE,0); + g_signal_connect(G_OBJECT(button),"clicked", + G_CALLBACK(_call_back_add_window_quit),this); +- gtk_tooltips_set_tip(Tooltips, button, +- _("Quit this application"), ++ gtk_widget_set_tooltip_text(button, + _("Save dictionary and quit this application.")); + + // get selection at the time of launching +@@ -443,16 +435,19 @@ void _call_back_manage_mode(GtkWidget *widget, + void _call_back_selection_data_received(GtkWidget *widget, + GtkSelectionData *selection_data, + gpointer data){ +- if(selection_data->length < 0){ ++ int emit_length = gtk_selection_data_get_length(selection_data); ++ GdkAtom emit_type = gtk_selection_data_get_data_type(selection_data); ++ const guchar *emit_data = gtk_selection_data_get_data(selection_data); ++ if(emit_length < 0){ + // failed retrieving selection + // do nothing + return; + } + +- string atom_name = string(gdk_atom_name(selection_data->type)); ++ string atom_name = string(gdk_atom_name(emit_type)); + +- gchar *str; +- str = reinterpret_cast(selection_data->data); ++ const gchar *str; ++ str = reinterpret_cast(emit_data); + + if(atom_name == "UTF8_STRING"){ + gtk_entry_set_text(GTK_ENTRY(widget), str); +diff --git a/KasumiAddWindow.hxx b/KasumiAddWindow.hxx +index 5101314..352326a 100644 +--- a/KasumiAddWindow.hxx ++++ b/KasumiAddWindow.hxx +@@ -77,7 +77,6 @@ private: + GtkWidget *FrequencySpin; + GtkWidget *WordTypeCategoryCombo; + GtkWidget *WordTypeCombo; +- GtkTooltips *Tooltips; + + GtkTreeIter defaultWordTypeCategoryIter; + +diff --git a/KasumiMainWindow.cxx b/KasumiMainWindow.cxx +index 4e86c7a..e8a8d56 100644 +--- a/KasumiMainWindow.cxx ++++ b/KasumiMainWindow.cxx +@@ -150,22 +150,22 @@ void KasumiMainWindow::createWindow() + mSaveButton = gtk_button_new_from_stock ("gtk-save"); + gtk_widget_show (mSaveButton); + gtk_box_pack_start (GTK_BOX (hbuttonbox1), mSaveButton, FALSE, TRUE, 0); +- GTK_WIDGET_SET_FLAGS (mSaveButton, GTK_CAN_DEFAULT); ++ gtk_widget_set_can_default (mSaveButton, TRUE); + + mAddButton = gtk_button_new_from_stock ("gtk-add"); + gtk_widget_show (mAddButton); + gtk_box_pack_start (GTK_BOX (hbuttonbox1), mAddButton, FALSE, TRUE, 0); +- GTK_WIDGET_SET_FLAGS (mAddButton, GTK_CAN_DEFAULT); ++ gtk_widget_set_can_default (mAddButton, TRUE); + + mRemoveButton = gtk_button_new_from_stock ("gtk-delete"); + gtk_widget_show (mRemoveButton); + gtk_box_pack_start (GTK_BOX (hbuttonbox1), mRemoveButton, FALSE, TRUE, 0); +- GTK_WIDGET_SET_FLAGS (mRemoveButton, GTK_CAN_DEFAULT); ++ gtk_widget_set_can_default (mRemoveButton, TRUE); + + mQuitButton = gtk_button_new_from_stock ("gtk-close"); + gtk_widget_show (mQuitButton); + gtk_box_pack_end (GTK_BOX (hbuttonbox1), mQuitButton, FALSE, TRUE, 0); +- GTK_WIDGET_SET_FLAGS (mQuitButton, GTK_CAN_DEFAULT); ++ gtk_widget_set_can_default (mQuitButton, TRUE); + } + + void KasumiMainWindow::createWordList() +@@ -474,7 +474,7 @@ void KasumiMainWindow::editedTextColumn(GtkCellRendererText *renderer, + + // set cursor right or left + GtkTreeViewColumn *postCol = NULL; +- if(lastKeyVal == GDK_Tab) ++ if(lastKeyVal == GDK_KEY_Tab) + { + if(lastKeyState & GDK_CONTROL_MASK) + { // set cursor left +@@ -887,42 +887,42 @@ guint getAccelKey(const string &key){ + + string shortkey = key.substr(i+1); + +- if(shortkey == "A") return GDK_A; +- else if(shortkey == "B") return GDK_B; +- else if(shortkey == "C") return GDK_C; +- else if(shortkey == "D") return GDK_D; +- else if(shortkey == "E") return GDK_E; +- else if(shortkey == "F") return GDK_F; +- else if(shortkey == "G") return GDK_G; +- else if(shortkey == "H") return GDK_H; +- else if(shortkey == "I") return GDK_I; +- else if(shortkey == "J") return GDK_J; +- else if(shortkey == "K") return GDK_K; +- else if(shortkey == "L") return GDK_L; +- else if(shortkey == "M") return GDK_M; +- else if(shortkey == "N") return GDK_N; +- else if(shortkey == "O") return GDK_O; +- else if(shortkey == "P") return GDK_P; +- else if(shortkey == "Q") return GDK_Q; +- else if(shortkey == "R") return GDK_R; +- else if(shortkey == "S") return GDK_S; +- else if(shortkey == "T") return GDK_T; +- else if(shortkey == "U") return GDK_U; +- else if(shortkey == "V") return GDK_V; +- else if(shortkey == "W") return GDK_W; +- else if(shortkey == "X") return GDK_X; +- else if(shortkey == "Y") return GDK_Y; +- else if(shortkey == "Z") return GDK_Z; +- else if(shortkey == "0") return GDK_0; +- else if(shortkey == "1") return GDK_1; +- else if(shortkey == "2") return GDK_2; +- else if(shortkey == "3") return GDK_3; +- else if(shortkey == "4") return GDK_4; +- else if(shortkey == "5") return GDK_5; +- else if(shortkey == "6") return GDK_5; +- else if(shortkey == "7") return GDK_7; +- else if(shortkey == "8") return GDK_8; +- else if(shortkey == "9") return GDK_9; ++ if(shortkey == "A") return GDK_KEY_A; ++ else if(shortkey == "B") return GDK_KEY_B; ++ else if(shortkey == "C") return GDK_KEY_C; ++ else if(shortkey == "D") return GDK_KEY_D; ++ else if(shortkey == "E") return GDK_KEY_E; ++ else if(shortkey == "F") return GDK_KEY_F; ++ else if(shortkey == "G") return GDK_KEY_G; ++ else if(shortkey == "H") return GDK_KEY_H; ++ else if(shortkey == "I") return GDK_KEY_I; ++ else if(shortkey == "J") return GDK_KEY_J; ++ else if(shortkey == "K") return GDK_KEY_K; ++ else if(shortkey == "L") return GDK_KEY_L; ++ else if(shortkey == "M") return GDK_KEY_M; ++ else if(shortkey == "N") return GDK_KEY_N; ++ else if(shortkey == "O") return GDK_KEY_O; ++ else if(shortkey == "P") return GDK_KEY_P; ++ else if(shortkey == "Q") return GDK_KEY_Q; ++ else if(shortkey == "R") return GDK_KEY_R; ++ else if(shortkey == "S") return GDK_KEY_S; ++ else if(shortkey == "T") return GDK_KEY_T; ++ else if(shortkey == "U") return GDK_KEY_U; ++ else if(shortkey == "V") return GDK_KEY_V; ++ else if(shortkey == "W") return GDK_KEY_W; ++ else if(shortkey == "X") return GDK_KEY_X; ++ else if(shortkey == "Y") return GDK_KEY_Y; ++ else if(shortkey == "Z") return GDK_KEY_Z; ++ else if(shortkey == "0") return GDK_KEY_0; ++ else if(shortkey == "1") return GDK_KEY_1; ++ else if(shortkey == "2") return GDK_KEY_2; ++ else if(shortkey == "3") return GDK_KEY_3; ++ else if(shortkey == "4") return GDK_KEY_4; ++ else if(shortkey == "5") return GDK_KEY_5; ++ else if(shortkey == "6") return GDK_KEY_5; ++ else if(shortkey == "7") return GDK_KEY_7; ++ else if(shortkey == "8") return GDK_KEY_8; ++ else if(shortkey == "9") return GDK_KEY_9; + + cerr << "Invalid shortcut key option: " << key << endl; + exit(1); +diff --git a/cellrendererspin.c b/cellrendererspin.c +index 885d462..85d3bda 100644 +--- a/cellrendererspin.c ++++ b/cellrendererspin.c +@@ -52,8 +52,6 @@ + */ + + #include "cellrendererspin.h" +-#include +-#include + #include + + #define GUI_CELL_RENDERER_SPIN_PATH "gui-cell-renderer-spin-path" +@@ -239,6 +237,7 @@ gui_cell_renderer_spin_editing_done (GtkCellEditable *spinbutton, + const gchar *path; + const gchar *new_text; + GCRSpinInfo *info; ++ gboolean canceled = FALSE; + + info = g_object_get_data (G_OBJECT (data), GUI_CELL_RENDERER_SPIN_INFO); + +@@ -248,7 +247,8 @@ gui_cell_renderer_spin_editing_done (GtkCellEditable *spinbutton, + info->focus_out_id = 0; + } + +- if (GTK_ENTRY(spinbutton)->editing_canceled) ++ g_object_get (spinbutton, "editing-canceled", &canceled, NULL); ++ if (canceled) + return; + + path = g_object_get_data (G_OBJECT (spinbutton), GUI_CELL_RENDERER_SPIN_PATH); +@@ -317,19 +317,23 @@ gui_cell_renderer_spin_start_editing (GtkCellRenderer *cell, + GtkWidget *spinbutton; + GCRSpinInfo *info; + gdouble curval = 0.0; ++ gboolean editable = FALSE; ++ gchar* str = NULL; + + celltext = GTK_CELL_RENDERER_TEXT(cell); + spincell = GUI_CELL_RENDERER_SPIN(cell); + + /* If the cell isn't editable we return NULL. */ +- if (celltext->editable == FALSE) ++ editable = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (celltext), "editable")); ++ if (editable == FALSE) + return NULL; + + spinbutton = g_object_new (GTK_TYPE_SPIN_BUTTON, "has_frame", FALSE, "numeric", TRUE, NULL); + + /* dirty */ +- if (celltext->text) +- curval = atof(celltext->text); ++ str = (gchar *)g_object_get_data (G_OBJECT (celltext), "text"); ++ if (str) ++ curval = atof(str); + + adj = GTK_ADJUSTMENT(gtk_adjustment_new(curval, + spincell->lower, +diff --git a/cellrendererspin.h b/cellrendererspin.h +index c6b33d2..36a2740 100644 +--- a/cellrendererspin.h ++++ b/cellrendererspin.h +@@ -27,7 +27,7 @@ + #ifndef _cellrendererspin_h_included_ + #define _cellrendererspin_h_included_ + +-#include ++#include + + G_BEGIN_DECLS + +diff --git a/main.cxx b/main.cxx +index c5c459e..8ed5edf 100644 +--- a/main.cxx ++++ b/main.cxx +@@ -101,14 +101,15 @@ static void cb_selection_get(GtkWidget *widget, + { + gchar *text = NULL; + gint length = 0; ++ GdkAtom emit_selection = gtk_selection_data_get_selection(data); + +- if (data->selection == atom0) { ++ if (emit_selection == atom0) { + text = "Kasumi Selection"; + length = strlen(text); + gtk_selection_convert(window, atom1, + GDK_SELECTION_TYPE_STRING, + GDK_CURRENT_TIME); +- } else if (data->selection == atom1 && arg_text != NULL) { ++ } else if (emit_selection == atom1 && arg_text != NULL) { + text = arg_text; + arg_text = NULL; + length = strlen(text); +@@ -116,7 +117,7 @@ static void cb_selection_get(GtkWidget *widget, + + if (text != NULL) { + gtk_selection_data_set_text(data, text, length); +- if (data->selection == atom1) ++ if (emit_selection == atom1) + g_free(text); + } + } +@@ -126,9 +127,11 @@ static void cb_selection_received(GtkWidget *widget, + guint time, + gpointer user_data) + { +- if (data->selection == atom0) { +- instance = MAX(data->length, 0); +- } else if (data->selection == atom1 && data->length > 0) { ++ GdkAtom emit_selection = gtk_selection_data_get_selection(data); ++ int emit_length = gtk_selection_data_get_length(data); ++ if (emit_selection == atom0) { ++ instance = MAX(emit_length, 0); ++ } else if (emit_selection == atom1 && emit_length > 0) { + } + } + +-- +2.28.0 + diff --git a/kasumi.changes b/kasumi.changes index e211fa1..d417c95 100644 --- a/kasumi.changes +++ b/kasumi.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Fri Jul 16 16:54:27 CEST 2021 - tiwai@suse.de + +- Add gtk3 port (partly borrowed from Fedora package): + kasumi-2.5-gtk3.patch + kasumi-2.5-configure-gtk3.patch +- Fix build with the recent gcc: + kasumi-2.5-c++14.patch +- Spec cleanup + ------------------------------------------------------------------- Sun Nov 13 09:11:50 UTC 2011 - coolo@suse.com diff --git a/kasumi.spec b/kasumi.spec index 355781d..71415cb 100644 --- a/kasumi.spec +++ b/kasumi.spec @@ -1,7 +1,7 @@ # # spec file for package kasumi # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,56 +12,53 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # -# norootforbuild - Name: kasumi -BuildRequires: anthy-devel gcc-c++ gtk2-devel libtool update-desktop-files -License: GPL v2 or later -Group: System/I18n/Japanese -AutoReqProv: on -Provides: locale(anthy:ja) Version: 2.5 -Release: 1 -Url: http://kasumi.sourceforge.jp/ -Source0: kasumi-%{version}.tar.bz2 -Patch: desktop.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-build +Release: 0 Summary: Dictionary Tool for Anthy +License: GPL-2.0-or-later +Group: System/I18n/Japanese +URL: http://kasumi.sourceforge.jp/ +Source0: kasumi-%{version}.tar.bz2 +Patch1: desktop.patch +Patch2: kasumi-2.5-gtk3.patch +Patch3: kasumi-2.5-configure-gtk3.patch +Patch4: kasumi-2.5-c++14.patch +BuildRequires: anthy-devel +BuildRequires: gcc-c++ +BuildRequires: gtk3-devel +BuildRequires: libtool +BuildRequires: update-desktop-files +Provides: locale(anthy:ja) %description A graphical tool to edit the personal dictionary for Anthy. - - -Authors: --------- - Takashi Nakamoto - %prep %setup -q -%patch -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build libtoolize --force autoreconf --force --install %configure -make %{?jobs:-j %jobs} +%make_build %install -%makeinstall -%suse_update_desktop_file -i %name System SystemSetup +%make_install +%suse_update_desktop_file -i %{name} System SystemSetup %find_lang kasumi -%clean -rm -rf $RPM_BUILD_ROOT - %files -f kasumi.lang -%defattr(-, root, root) -%doc AUTHORS COPYING ChangeLog INSTALL NEWS README +%license COPYING +%doc AUTHORS ChangeLog INSTALL NEWS README %{_bindir}/* %{_datadir}/pixmaps/kasumi.png %{_datadir}/applications/kasumi.desktop