From 9be7b0ab68f37b015b1203ba01b7977a9088cec8 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 30 Jan 2021 18:07:49 +0900 Subject: [PATCH] Migrate from GTK 2 to GTK 3 --- .github/workflows/linux.yml | 2 +- CMakeLists.txt | 16 ++++---------- README.md | 2 +- src/CMakeLists.txt | 5 ++--- src/menu.c | 2 +- src/menu_callback.c | 2 +- src/menu_callback.h | 2 +- src/menu_gui.c | 42 ++++++++++++++++++------------------- src/menu_gui_volval.c | 8 +++---- 9 files changed, 36 insertions(+), 45 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 932078d..87358ff 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -15,7 +15,7 @@ jobs: - name: Install Deps run: | sudo apt update - sudo apt install libgtk2.0-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev + sudo apt install libgtk-3-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev - name: Build run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a72bfa..daeade5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,14 +14,6 @@ if (MSYS) list(APPEND CMAKE_LIBRARY_PATH $ENV{MINGW_PREFIX}/$ENV{MINGW_CHOST}/lib) endif () -# A wrapper around find_package() that skips the check if ENABLE_ is false -macro (optional_find_package package) - option(ENABLE_${package} "Use ${package} if available" ON) - if (ENABLE_${package}) - find_package(${package} ${ARGN}) - endif() -endmacro() - # A wrapper around pkg_check_modules() that skips the check if ENABLE_ is false macro (optional_pkg_check_modules prefix) option(ENABLE_${prefix} "Use ${prefix} if available" ON) @@ -45,12 +37,12 @@ elseif (ANDROID) else() find_package(ZLIB REQUIRED) - optional_find_package(GTK2 COMPONENTS gtk) - if (GTK2_FOUND) + include(FindPkgConfig) + optional_pkg_check_modules(GTK3 IMPORTED_TARGET gtk+-3.0) + if (GTK3_FOUND) set(ENABLE_GTK 1) endif() - include(FindPkgConfig) pkg_check_modules(SDL2 IMPORTED_TARGET sdl2) pkg_check_modules(SDL2TTF IMPORTED_TARGET SDL2_ttf) optional_pkg_check_modules(SDL2MIXER IMPORTED_TARGET SDL2_mixer) @@ -70,7 +62,7 @@ if (EMSCRIPTEN) set(SRC_MENU menu_emscripten.c) elseif (ANDROID) set(SRC_MENU menu_android.c) -elseif (GTK2_FOUND) +elseif (ENABLE_GTK) set(SRC_MENU menu.c menu_callback.c menu_gui.c s39init.c) # i18n support (currently only menus are translated) diff --git a/README.md b/README.md index 5bc6f6f..94e50e6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Prebuilt binaries for Windows and Android can be downloaded from the [Releases]( ## Build ### Linux (Debian / Ubuntu) - $ sudo apt install build-essential cmake libgtk2.0-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev + $ sudo apt install build-essential cmake libgtk-3-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev $ mkdir -p out/debug $ cd out/debug $ cmake -DCMAKE_BUILD_TYPE=Debug ../../ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6c3ef11..49ab9d6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,9 +104,8 @@ else() # non-emscripten, non-android target_link_libraries(xsystem35 PRIVATE m ZLIB::ZLIB) target_link_libraries(xsystem35 PRIVATE PkgConfig::SDL2) target_link_libraries(xsystem35 PRIVATE PkgConfig::SDL2TTF) - if (GTK2_FOUND) - target_compile_definitions(xsystem35 PRIVATE GDK_DISABLE_DEPRECATED GTK_DISABLE_DEPRECATED GSEAL_ENABLE) - target_link_libraries(xsystem35 PRIVATE GTK2::gtk) + if (GTK3_FOUND) + target_link_libraries(xsystem35 PRIVATE PkgConfig::GTK3) endif() if (SDL2MIXER_FOUND) target_link_libraries(xsystem35 PRIVATE PkgConfig::SDL2MIXER) diff --git a/src/menu.c b/src/menu.c index bb8c048..f70e348 100644 --- a/src/menu.c +++ b/src/menu.c @@ -108,7 +108,7 @@ boolean menu_inputstring2(INPUTSTRING_PARAM *p) { } boolean menu_inputnumber(INPUTNUM_PARAM *p) { - GtkObject *adj; + GtkAdjustment *adj; char s[256]; if (!menu_initilized) return FALSE; diff --git a/src/menu_callback.c b/src/menu_callback.c index 3abee7a..e0ffdfd 100644 --- a/src/menu_callback.c +++ b/src/menu_callback.c @@ -58,7 +58,7 @@ GtkWidget *menu_window_about; /* about xsystem35 window */ GtkWidget *menu_window_msgbox;/* message box window */ void -on_window3_destroy (GtkObject *object, +on_window3_destroy (GObject *object, gpointer user_data) { diff --git a/src/menu_callback.h b/src/menu_callback.h index 3a48e8f..6925f4d 100644 --- a/src/menu_callback.h +++ b/src/menu_callback.h @@ -52,7 +52,7 @@ extern GtkWidget *menu_window_msgbox;/* message box window */ void -on_window3_destroy (GtkObject *object, +on_window3_destroy (GObject *object, gpointer user_data); void diff --git a/src/menu_gui.c b/src/menu_gui.c index 877205a..ab8f8c0 100644 --- a/src/menu_gui.c +++ b/src/menu_gui.c @@ -41,7 +41,7 @@ create_window1 (void) GtkWidget *window1; GtkWidget *hbox1; GtkWidget *vbox1; - GtkObject *spinbutton1_adj; + GtkAdjustment *spinbutton1_adj; GtkWidget *spinbutton1; GtkWidget *table1; GtkWidget *label3; @@ -182,13 +182,13 @@ create_window1 (void) gtk_widget_show (label4); gtk_box_pack_start (GTK_BOX (vbox2), label4, FALSE, FALSE, 0); - g_signal_connect(GTK_OBJECT (spinbutton1), "activate", + g_signal_connect(spinbutton1, "activate", G_CALLBACK(on_spinbutton1_activate), NULL); - g_signal_connect(GTK_OBJECT (button1), "clicked", + g_signal_connect(button1, "clicked", G_CALLBACK(on_button1_clicked), NULL); - g_signal_connect(GTK_OBJECT (button2), "clicked", + g_signal_connect(button2, "clicked", G_CALLBACK(on_button2_clicked), NULL); @@ -277,13 +277,13 @@ create_window2 (void) gtk_widget_show (button3); gtk_box_pack_end (GTK_BOX (hbox2), button3, FALSE, FALSE, 0); - g_signal_connect(GTK_OBJECT (button4), "clicked", + g_signal_connect(button4, "clicked", G_CALLBACK(on_button4_clicked), NULL); - g_signal_connect(GTK_OBJECT (button3), "clicked", + g_signal_connect(button3, "clicked", G_CALLBACK(on_button3_clicked), NULL); - g_signal_connect(GTK_OBJECT (entry1), "activate", + g_signal_connect(entry1, "activate", G_CALLBACK(on_entry1_activate), NULL); @@ -342,13 +342,13 @@ create_window3 (void) gtk_widget_show (button6); gtk_box_pack_start (GTK_BOX (hbox3), button6, FALSE, TRUE, 0); - g_signal_connect(GTK_OBJECT (window3), "destroy", + g_signal_connect(window3, "destroy", G_CALLBACK(on_window3_destroy), NULL); - g_signal_connect(GTK_OBJECT (button5), "clicked", + g_signal_connect(button5, "clicked", G_CALLBACK(on_button5_clicked), NULL); - g_signal_connect(GTK_OBJECT (button6), "clicked", + g_signal_connect(button6, "clicked", G_CALLBACK(on_button6_clicked), NULL); @@ -430,7 +430,7 @@ create_window4 (void) gtk_fixed_put (GTK_FIXED (fixed1), button11, 184, 104); gtk_widget_set_size_request(button11, 64, 24); - g_signal_connect(GTK_OBJECT (button11), "clicked", + g_signal_connect(button11, "clicked", G_CALLBACK(on_button11_clicked), NULL); return window4; @@ -560,28 +560,28 @@ create_menu1 (void) gtk_widget_show (item17); gtk_container_add (GTK_CONTAINER (menu1), item17); - g_signal_connect(GTK_OBJECT (menu1), "deactivate", + g_signal_connect(menu1, "deactivate", G_CALLBACK(on_menu1_deactivate), NULL); - g_signal_connect(GTK_OBJECT (item2), "toggled", + g_signal_connect(item2, "toggled", G_CALLBACK(on_item2_activate), NULL); - g_signal_connect(GTK_OBJECT (item3), "toggled", + g_signal_connect(item3, "toggled", G_CALLBACK(on_item3_activate), NULL); - g_signal_connect(GTK_OBJECT (item5), "activate", + g_signal_connect(item5, "activate", G_CALLBACK(on_item5_activate), NULL); - g_signal_connect(GTK_OBJECT (item6), "activate", + g_signal_connect(item6, "activate", G_CALLBACK(on_item6_activate), NULL); - g_signal_connect(GTK_OBJECT (item7), "activate", + g_signal_connect(item7, "activate", G_CALLBACK(on_item7_activate), NULL); - g_signal_connect(GTK_OBJECT (item16), "activate", + g_signal_connect(item16, "activate", G_CALLBACK(on_item16_activate), NULL); - g_signal_connect(GTK_OBJECT (item17), "activate", + g_signal_connect(item17, "activate", G_CALLBACK(on_item17_activate), NULL); @@ -608,7 +608,7 @@ create_window5 (void) gtk_widget_set_size_request(entry2, 100, 28); gtk_entry_set_text (GTK_ENTRY (entry2), _("default")); - g_signal_connect(GTK_OBJECT (entry2), "activate", + g_signal_connect(entry2, "activate", G_CALLBACK(on_entry2_activate), NULL); @@ -649,7 +649,7 @@ create_window6 (void) gtk_widget_show (button16); gtk_box_pack_start (GTK_BOX (vbox5), button16, FALSE, FALSE, 0); - g_signal_connect(GTK_OBJECT (button16), "clicked", + g_signal_connect(button16, "clicked", G_CALLBACK(on_button16_clicked), NULL); diff --git a/src/menu_gui_volval.c b/src/menu_gui_volval.c index 412d1df..c90dbef 100644 --- a/src/menu_gui_volval.c +++ b/src/menu_gui_volval.c @@ -29,7 +29,7 @@ static GtkWidget* vval_win_open(struct _volval *vval, int max) { GtkWidget *label1; GtkWidget *hscale1; GtkWidget *checkbutton1; - GtkObject *adjustment1; + GtkAdjustment *adjustment1; GtkWidget *hbox1; GtkWidget *label6; GtkWidget *label7; @@ -71,7 +71,7 @@ static GtkWidget* vval_win_open(struct _volval *vval, int max) { gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT); adjustment1 = gtk_adjustment_new (vval[i].vol, 0, 100, 0, 10, 0); - g_signal_connect(GTK_OBJECT(adjustment1), "value-changed", + g_signal_connect(adjustment1, "value-changed", G_CALLBACK(on_adjustment1_value_changed), &(vval[i].vol)); @@ -94,7 +94,7 @@ static GtkWidget* vval_win_open(struct _volval *vval, int max) { gtk_table_attach (GTK_TABLE (table2), checkbutton1, 2, 3, j+1, j+2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); - g_signal_connect(GTK_OBJECT (checkbutton1), "toggled", + g_signal_connect(checkbutton1, "toggled", G_CALLBACK(on_checkbutton1_toggled), &(vval[i].mute)); @@ -127,7 +127,7 @@ static GtkWidget* vval_win_open(struct _volval *vval, int max) { gtk_box_pack_start (GTK_BOX (hbox1), label7, TRUE, FALSE, 3); gtk_label_set_justify (GTK_LABEL (label7), GTK_JUSTIFY_RIGHT); - g_signal_connect(GTK_OBJECT (window1), "delete_event", + g_signal_connect(window1, "delete_event", G_CALLBACK(on_window1_destroy), NULL);