#2 Migrate kasumi GUI to GTK3
Merged 3 years ago by tagoh. Opened 3 years ago by fujiwara.
rpms/ fujiwara/kasumi gtk3  into  rawhide

@@ -0,0 +1,369 @@ 

+ From 9de5eb6d221bf3438c75a756c9acffa01e2c51fb Mon Sep 17 00:00:00 2001

+ From: fujiwarat <takao.fujiwara1@gmail.com>

+ 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."));
tagoh commented 3 years ago

Probably better keep same message so we can use same translation in ja.po. or if you feel it would be better than before, good to update ja.po too.

+  

+  	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."));
tagoh commented 3 years ago

Ditto.

+  

+  	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."));
tagoh commented 3 years ago

Ditto.

+  

+  	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."));
tagoh commented 3 years ago

Ditto.

+  

+  	// 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<gchar*>(selection_data->data);

+ +    const gchar *str;

+ +    str = reinterpret_cast<const gchar*>(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 <gtk/gtkadjustment.h>

+ -#include <gtk/gtkspinbutton.h>

+  #include <stdlib.h>

+  

+  #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 <gtk/gtkcellrenderertext.h>

+ +#include <gtk/gtk.h>

+  

+  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

+ 

file modified
+13 -3
@@ -6,16 +6,16 @@ 

  

  Name:    kasumi

  Version: 2.5

- Release: 32%{?dist}

+ Release: 33%{?dist}

  

  License: GPLv2+

  URL:     http://kasumi.sourceforge.jp/

  BuildRequires: gtk2-devel anthy-devel

  BuildRequires: autoconf automake libtool

  BuildRequires: gcc-c++

- %if %{with unicode}

- BuildRequires: anthy-unicode-devel

  BuildRequires: make

+ %if %{with unicode}

+ BuildRequires: gtk3-devel anthy-unicode-devel

  Requires: %{name}-common = %{version}-%{release}

  %else

  Provides: %{name}-common = %{version}-%{release}
@@ -23,6 +23,7 @@ 

  %endif

  Source0: http://jaist.dl.sourceforge.jp/kasumi/41436/%{name}-%{version}.tar.gz

  Patch0: kasumi-853099-manpage.patch

+ Patch1: kasumi-1928410-gtk3.patch

  

  

  Summary: An anthy dictionary management tool
@@ -58,6 +59,12 @@ 

  echo "# Building kasumi-unicode"

  sed -e 's/AC_CHECK_LIB(anthydic,/AC_CHECK_LIB(anthydic-unicode,/' \

      -e 's/AC_CHECK_LIB(anthy,/AC_CHECK_LIB(anthy-unicode,/' \

+     -e '/AM_PATH_GTK_2_0(/i\

+ PKG_CHECK_MODULES([GTK], [gtk+-3.0])\

+ CFLAGS="$CFLAGS $GTK_CFLAGS"\

+ CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"\

+ LIBS="$LIBS $GTK_LIBS"' \

+     -e '/AM_PATH_GTK_2_0(/d' \

      -i.orig configure.in

  autoreconf -f -i

  %configure
@@ -110,6 +117,9 @@ 

  

  

  %changelog

+ * Tue Feb 16 2021 Takao Fujiwra <tfujiwar@redhat.com> - 2.5-33

+ - Migrate kasumi GUI to GTK3

+ 

  * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.5-32

  - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

  

no initial comment

Probably better keep same message so we can use same translation in ja.po. or if you feel it would be better than before, good to update ja.po too.

Probably better keep same message so we can use same translation in ja.po. or if you feel it would be better than before, good to update ja.po too.

I don't change the translatable strings.
gtk_tooltips_set_tip() has two arguments of strings but gtk_widget_set_tooltip_text() has only one argument of the string so I deleted one argument.

Ah, you're right. thank you for explanation.

Pull-Request has been merged by tagoh

3 years ago
Metadata