gtk_action_group_new() dan GtkStock - Apa yang harus digunakan?

Kode berikut berasal dari daftar 9-11 dari Dasar-Dasar Pengembangan GTK+. Melalui buku ini, saya telah mencoba untuk memigrasikan hal-hal spesifik GTK2 (atau kode apa pun yang terdepresiasi) untuk mempelajari apa yang relevan pada saat ini. Meskipun demikian, ini menghasilkan banyak peringatan saat kompilasi.

#define NUM_ENTRIES 13
static GtkActionEntry entries[] =
{
    { "File", NULL, "_File", NULL, NULL, NULL },
        { "Open", GTK_STOCK_OPEN, NULL, NULL, "Open an existing file", G_CALLBACK(open) },
        { "Save", GTK_STOCK_SAVE, NULL, NULL, "Save the document to a file", G_CALLBACK(save) },
        { "Quit", GTK_STOCK_QUIT, NULL, NULL, "Quit the application", G_CALLBACK(quit) },
    { "Edit", NULL, "_Edit", NULL, NULL, NULL },
        { "Cut", GTK_STOCK_CUT, NULL, NULL, "Cut the selection to the clipboard", G_CALLBACK(cut) },
        { "Copy", GTK_STOCK_COPY, NULL, NULL, "Copy the selection to the clipboard", G_CALLBACK(copy) },
        { "Paste", GTK_STOCK_PASTE, NULL, NULL, "Paste from the clipboard", G_CALLBACK(paste) },
        { "SelectAll", GTK_STOCK_SELECT_ALL, NULL, NULL, "Select all the text", G_CALLBACK(selectall) },
        { "Deselect", NULL, "_Deselect", NULL, "Deselect text", G_CALLBACK(deselect) },
    { "Help", NULL, "_Help", NULL, NULL, NULL },
        { "Contents", GTK_STOCK_HELP, NULL, NULL, "Get help using the application", G_CALLBACK(help) },
        { "About", GTK_STOCK_ABOUT, NULL, NULL, "More information about the application", G_CALLBACK(about) }
};

int main(int argc, char *argv[])
{
    GtkWidget *window, *menubar, *toolbar, *vbox;
    GtkActionGroup *group;
    GtkUIManager *uimanager;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "UI Manager");
    gtk_widget_set_size_request(window, 250, -1);
    g_signal_connect(window, "destroy", gtk_main_quit, NULL);

    group = gtk_action_group_new("MainActionGroup");
    gtk_action_group_add_actions(group, entries, NUM_ENTRIES, NULL);

    uimanager = gtk_ui_manager_new();
    gtk_ui_manager_insert_action_group(uimanager, group, 0);
    gtk_ui_manager_add_ui_from_file(uimanager, "menu.ui", NULL);
    gtk_ui_manager_add_ui_from_file(uimanager, "toolbar.ui", NULL);

    menubar = gtk_ui_manager_get_widget(uimanager, "/MenuBar");
    toolbar = gtk_ui_manager_get_widget(uimanager, "/Toolbar");
    gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
    gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(uimanager));

    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);

    gtk_container_add(GTK_CONTAINER(window), vbox);
    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

Secara khusus:

uimanager.c: At top level:
uimanager.c:18:3: warning: ‘GtkStock’ is deprecated [-Wdeprecated-declarations]
   { "Open", GTK_STOCK_OPEN, NULL, NULL, "Open an existing file", G_CALLBACK(open) },
   ^
...
uimanager.c: In function ‘main’:
uimanager.c:45:2: warning: ‘gtk_action_group_new’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkactiongroup.h:175) [-Wdeprecated-declarations]
  group = gtk_action_group_new("MainActionGroup");
  ^
uimanager.c:46:2: warning: ‘gtk_action_group_add_actions’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkactiongroup.h:210) [-Wdeprecated-declarations]
  gtk_action_group_add_actions(group, entries, NUM_ENTRIES, NULL);
  ^
uimanager.c:48:2: warning: ‘gtk_ui_manager_new’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:130) [-Wdeprecated-declarations]
  uimanager = gtk_ui_manager_new();
  ^
uimanager.c:49:2: warning: ‘gtk_ui_manager_insert_action_group’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:138) [-Wdeprecated-declarations]
  gtk_ui_manager_insert_action_group(uimanager, group, 0);
  ^
uimanager.c:50:2: warning: ‘gtk_ui_manager_add_ui_from_file’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:163) [-Wdeprecated-declarations]
  gtk_ui_manager_add_ui_from_file(uimanager, "menu.ui", NULL);
  ^
uimanager.c:51:2: warning: ‘gtk_ui_manager_add_ui_from_file’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:163) [-Wdeprecated-declarations]
  gtk_ui_manager_add_ui_from_file(uimanager, "toolbar.ui", NULL);
  ^
uimanager.c:53:2: warning: ‘gtk_ui_manager_get_widget’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:149) [-Wdeprecated-declarations]
  menubar = gtk_ui_manager_get_widget(uimanager, "/MenuBar");
  ^
uimanager.c:54:2: warning: ‘gtk_ui_manager_get_widget’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:149) [-Wdeprecated-declarations]
  toolbar = gtk_ui_manager_get_widget(uimanager, "/Toolbar");
  ^
uimanager.c:56:2: warning: ‘gtk_ui_manager_get_accel_group’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkuimanager.h:147) [-Wdeprecated-declarations]
  gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(uimanager));
  ^

Apa pun alasannya, saya belum menemukan panduan yang tepat tentang apa yang harus dilakukan selain menggunakan item GtkStock, meskipun saya telah berhasil mengatasinya di setiap tutorial lainnya. Namun, hal yang sama berlaku untuk kelompok tindakan, pengelola UI, dan banyak peringatan di bagian kedua tersebut. Dokumen hanya mengatakan bahwa mereka disusutkan dan tidak digunakan. Jika iya, barang-barang tersebut harus diganti dengan apa?


person musasabi    schedule 16.07.2014    source sumber
comment
Tidak ada alasan untuk memberi suara negatif, informasi tentang apa yang harus digunakan tersebar di seluruh dokumen gtk, milis, dan rfc, setidaknya saya tidak dapat menemukan panduan migrasi yang menyatakan dengan jelas apa yang harus digunakan dari perspektif top-down.   -  person drahnr    schedule 25.07.2014


Jawaban (2)


  1. Gtk.ActionGroup tidak digunakan lagi, gunakan GLib.SimpleActionGroup
  2. Gtk.Action tidak digunakan lagi, gunakan GLib.SimpleAction
  3. Jika Anda membuat menu, gunakan Gtk.menu_new_with_model (pendekatan yang lebih baik)
  4. Gtk.UIManager tidak digunakan lagi, gunakan Gtk.Builder sebagai gantinya
  5. Gtk.Stock tidak digunakan lagi, gunakan properti "set_icon_name" jika ada. Misalnya, baca dokumen Gtk.ToolButton. Di menu, sayangnya Gtk3 menghilangkan penggunaan ikon di menu.
person luciomrx    schedule 17.07.2014
comment
Terima kasih, itu lengkap dan sangat spesifik. =) Bolehkah saya bertanya di mana (jika ada) informasi tentang apa yang harus digunakan selain fitur yang disusutkan dipublikasikan? - person musasabi; 17.07.2014
comment
Anda harus membaca Dokumentasi Gtk. Jika Anda menginstal libgtk3.0-doc secara offline atau Anda dapat menemukannya di developer.gnome.org/gtk3/stable - person luciomrx; 17.07.2014
comment
Saya pasti sudah membaca dokumentasinya, tetapi saya masih belum menemukan hal-hal yang Anda katakan secara spesifik tertulis. - person musasabi; 17.07.2014
comment
versi gtk apa yang Anda gunakan? - person luciomrx; 17.07.2014
comment
3.12.2-1, Arch Linux x86_64 - person musasabi; 17.07.2014
comment
@musasabi biasanya pemberitahuan penghentian dalam dokumentasi berisi setidaknya petunjuk tentang tempat mencarinya, lihat misalnya. gtk_image_new_from_stock () - person Jussi Kukkonen; 18.07.2014
comment
Benar, dan begitulah cara saya mengatasi berbagai hal sejauh ini. Namun untuk situasi seperti GtkActionGroup sepertinya tidak ada banyak jalan lain. Saat menanyakan pertanyaan ini, saya berharap saya melewatkan dokumen yang kurang jelas dibandingkan penggunaan catatan ini, karena tampaknya tidak konsisten. - person musasabi; 18.07.2014
comment
maaf butuh waktu lama untuk menghubungimu kembali, aku sakit. seperti yang dikatakan @jku, itu memang berisi petunjuk di mana hal-hal yang tidak berguna itu diganti. untuk kasus Anda, Gtk.ActionGroup tidak digunakan lagi tetapi tidak disebutkan cara menggantinya. Membaca lebih jauh dari itu, Gtk.Action sebenarnya terkait dengan Gtk.ActionGroup, juga tidak digunakan lagi. Namun disebutkan bagaimana cara menggantinya, dengan GLib.Action. Dari sana, bacalah sedikit lagi, sebelum Anda masuk ke GLib.ActionGroup. Juga, mungkin ini di luar topik, tetapi, setiap mekanisme dasar Gtk menggunakan GLib atau GIO kecuali untuk bagian menggambar yaitu Kairo - person luciomrx; 21.07.2014
comment
Memang! Saya tidak berpikir untuk mencari nasihat penghentian dari kelas orang tua. Dingin. =) - person musasabi; 25.07.2014
comment
Memang tidak semua konten ini ada di dalam dokumen. Dan kita 8 tahun kemudian: gitlab.gnome.org/GNOME/gtk/ -/masalah/2590 - person DarkTrick; 12.04.2020

Oleh karena itu, tidak ada panduan lengkap langkah demi langkah tentang cara melakukan sesuatu

untuk GtkStock, ada dokumen itu: https://docs.google.com/document/d/1KCVPoYQBqMbDP11tHPpjW6uaEHrvLUmcDPqKAppCY8o/pub

Untuk GtkUiManager dan lainnya ada beberapa contoh kode yang tersedia ketika Anda mengunduh kode sumber, ke dalam direktori contoh action-namespace.c

Akhirnya gtk-demo memberikan beberapa contoh kode juga.

person sinner73    schedule 02.08.2014