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