diff --git a/meson_options.txt b/meson_options.txt index 8120c030..faa9f665 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,6 +2,9 @@ option('gtk-frontend', type: 'boolean', description: 'Main graphical interface' ) +option('gtk3', type: 'boolean', value: false, + description: 'Build GTK frontend against GTK 3' +) option('text-frontend', type: 'boolean', value: false, description: 'Text interface (not generally useful)' ) diff --git a/src/fe-gtk/banlist.c b/src/fe-gtk/banlist.c index f54d001d..0a54d9cc 100644 --- a/src/fe-gtk/banlist.c +++ b/src/fe-gtk/banlist.c @@ -818,8 +818,13 @@ banlist_opengui (struct session *sess) /* create banlist view */ banl->treeview = banlist_treeview_new (vbox, banl); +#if HAVE_GTK3 + table = gtk_grid_new (); + gtk_grid_set_column_spacing (GTK_GRID (table), 16); +#else table = gtk_table_new (1, MODE_CT, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 16); +#endif gtk_box_pack_start (GTK_BOX (vbox), table, 0, 0, 0); for (i = 0; i < MODE_CT; i++) @@ -830,7 +835,11 @@ banlist_opengui (struct session *sess) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (banl->checkboxes[i]), (banl->checked & 1<checkboxes[i]), "toggled", G_CALLBACK (banlist_toggle), banl); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), banl->checkboxes[i], i + 1, 0, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), banl->checkboxes[i], i+1, i+2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); +#endif } bbox = gtk_hbutton_box_new (); diff --git a/src/fe-gtk/chanlist.c b/src/fe-gtk/chanlist.c index 7f7e1101..a8ed5b71 100644 --- a/src/fe-gtk/chanlist.c +++ b/src/fe-gtk/chanlist.c @@ -784,48 +784,85 @@ chanlist_opengui (server *serv, int do_refresh) /* ============================================================= */ +#if HAVE_GTK3 + table = gtk_grid_new (); + gtk_grid_set_column_spacing (GTK_GRID (table), 12); + gtk_grid_set_row_spacing (GTK_GRID (table), 3); +#else table = gtk_table_new (4, 4, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 12); gtk_table_set_row_spacings (GTK_TABLE (table), 3); +#endif gtk_box_pack_start (GTK_BOX (vbox), table, 0, 1, 0); gtk_widget_show (table); wid = gtkutil_button (NULL, GTK_STOCK_FIND, 0, chanlist_search_pressed, serv, _("_Search")); serv->gui->chanlist_search = wid; +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 3, 3, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), wid, 3, 4, 3, 4, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif wid = gtkutil_button (NULL, GTK_STOCK_REFRESH, 0, chanlist_refresh, serv, _("_Download List")); serv->gui->chanlist_refresh = wid; +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 3, 2, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), wid, 3, 4, 2, 3, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif wid = gtkutil_button (NULL, GTK_STOCK_SAVE_AS, 0, chanlist_save, serv, _("Save _List...")); serv->gui->chanlist_savelist = wid; +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 3, 1, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), wid, 3, 4, 1, 2, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif wid = gtkutil_button (NULL, GTK_STOCK_JUMP_TO, 0, chanlist_join, serv, _("_Join Channel")); serv->gui->chanlist_join = wid; +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 3, 0, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), wid, 3, 4, 0, 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif /* ============================================================= */ wid = gtk_label_new (_("Show only:")); +#if HAVE_GTK3 + gtk_widget_set_halign (wid, GTK_ALIGN_START); + gtk_widget_set_valign (wid, GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (table), wid, 0, 3, 1, 1); +#else gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5); gtk_table_attach (GTK_TABLE (table), wid, 0, 1, 3, 4, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif gtk_widget_show (wid); +#if HAVE_GTK3 + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); +#else hbox = gtk_hbox_new (0, 0); +#endif gtk_box_set_spacing (GTK_BOX (hbox), 9); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), hbox, 1, 3, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); +#endif gtk_widget_show (hbox); wid = gtk_label_new (_("channels with")); @@ -860,15 +897,30 @@ chanlist_opengui (server *serv, int do_refresh) /* ============================================================= */ wid = gtk_label_new (_("Look in:")); +#if HAVE_GTK3 + gtk_widget_set_halign (wid, GTK_ALIGN_START); + gtk_widget_set_valign (wid, GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (table), wid, 0, 2, 1, 1); +#else gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5); gtk_table_attach (GTK_TABLE (table), wid, 0, 1, 2, 3, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif gtk_widget_show (wid); +#if HAVE_GTK3 + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); +#else hbox = gtk_hbox_new (0, 0); +#endif gtk_box_set_spacing (GTK_BOX (hbox), 12); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), hbox, 1, 2, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); +#endif gtk_widget_show (hbox); wid = gtk_check_button_new_with_label (_("Channel name")); @@ -892,9 +944,15 @@ chanlist_opengui (server *serv, int do_refresh) /* ============================================================= */ wid = gtk_label_new (_("Search type:")); +#if HAVE_GTK3 + gtk_widget_set_halign (wid, GTK_ALIGN_START); + gtk_widget_set_valign (wid, GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (table), wid, 0, 1, 1, 1); +#else gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5); gtk_table_attach (GTK_TABLE (table), wid, 0, 1, 1, 2, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif gtk_widget_show (wid); wid = gtk_combo_box_text_new (); @@ -902,8 +960,12 @@ chanlist_opengui (server *serv, int do_refresh) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (wid), _("Pattern Match (Wildcards)")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (wid), _("Regular Expression")); gtk_combo_box_set_active (GTK_COMBO_BOX (wid), serv->gui->chanlist_search_type); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 1, 1, 1, 1); +#else gtk_table_attach (GTK_TABLE (table), wid, 1, 2, 1, 2, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif g_signal_connect (G_OBJECT (wid), "changed", G_CALLBACK (chanlist_combo_cb), serv); gtk_widget_show (wid); @@ -911,9 +973,15 @@ chanlist_opengui (server *serv, int do_refresh) /* ============================================================= */ wid = gtk_label_new (_("Find:")); +#if HAVE_GTK3 + gtk_widget_set_halign (wid, GTK_ALIGN_START); + gtk_widget_set_valign (wid, GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (table), wid, 0, 0, 1, 1); +#else gtk_misc_set_alignment (GTK_MISC (wid), 0, 0.5); gtk_table_attach (GTK_TABLE (table), wid, 0, 1, 0, 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif gtk_widget_show (wid); wid = gtk_entry_new (); @@ -923,8 +991,13 @@ chanlist_opengui (server *serv, int do_refresh) g_signal_connect (G_OBJECT (wid), "activate", G_CALLBACK (chanlist_search_pressed), (gpointer) serv); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 1, 0, 1, 1); + gtk_widget_set_hexpand (wid, TRUE); +#else gtk_table_attach (GTK_TABLE (table), wid, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); +#endif gtk_widget_show (wid); serv->gui->chanlist_wild = wid; @@ -933,8 +1006,12 @@ chanlist_opengui (server *serv, int do_refresh) /* ============================================================= */ wid = gtk_vseparator_new (); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), wid, 2, 0, 1, 5); +#else gtk_table_attach (GTK_TABLE (table), wid, 2, 3, 0, 5, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif gtk_widget_show (wid); g_signal_connect (G_OBJECT (serv->gui->chanlist_window), "destroy", diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index b7d77df7..0f1b587a 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -1337,24 +1337,42 @@ mg_open_quit_dialog (gboolean minimize_button) dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_widget_show (dialog_vbox1); +#if HAVE_GTK3 + table1 = gtk_grid_new (); + gtk_widget_show (table1); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table1), 6); + gtk_grid_set_row_spacing (GTK_GRID (table1), 12); + gtk_grid_set_column_spacing (GTK_GRID (table1), 12); +#else table1 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (table1), 6); gtk_table_set_row_spacings (GTK_TABLE (table1), 12); gtk_table_set_col_spacings (GTK_TABLE (table1), 12); +#endif image = gtk_image_new_from_stock ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG); gtk_widget_show (image); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table1), image, 0, 0, 1, 1); +#else gtk_table_attach (GTK_TABLE (table1), image, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); +#endif checkbutton1 = gtk_check_button_new_with_mnemonic (_("Don't ask next time.")); gtk_widget_show (checkbutton1); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table1), checkbutton1, 0, 1, 2, 1); + gtk_widget_set_hexpand (checkbutton1, TRUE); +#else gtk_table_attach (GTK_TABLE (table1), checkbutton1, 0, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 4); +#endif connecttext = g_strdup_printf (_("You are connected to %i IRC networks."), cons); text = g_strdup_printf ("%s\n\n%s\n%s", @@ -1365,11 +1383,19 @@ mg_open_quit_dialog (gboolean minimize_button) label = gtk_label_new (text); g_free (text); gtk_widget_show (label); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table1), label, 1, 0, 1, 1); + gtk_widget_set_hexpand (label, TRUE); + gtk_widget_set_vexpand (label, TRUE); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_widget_set_valign (label, GTK_ALIGN_CENTER); +#else gtk_table_attach (GTK_TABLE (table1), label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), 0, 0); - gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); +#endif + gtk_label_set_use_markup (GTK_LABEL (label), TRUE); dialog_action_area1 = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); gtk_widget_show (dialog_action_area1); @@ -1873,7 +1899,15 @@ mg_userlist_button (GtkWidget * box, char *label, char *cmd, GtkWidget *wid = gtk_button_new_with_label (label); g_signal_connect (G_OBJECT (wid), "clicked", G_CALLBACK (userlist_button_cb), cmd); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c); + gtk_widget_set_hexpand (wid, TRUE); + gtk_widget_set_vexpand (wid, TRUE); + gtk_widget_set_halign (wid, GTK_ALIGN_FILL); + gtk_widget_set_valign (wid, GTK_ALIGN_FILL); +#else gtk_table_attach_defaults (GTK_TABLE (box), wid, a, b, c, d); +#endif show_and_unfocus (wid); } @@ -1885,7 +1919,11 @@ mg_create_userlistbuttons (GtkWidget *box) int a = 0, b = 0; GtkWidget *tab; +#if HAVE_GTK3 + tab = gtk_grid_new (); +#else tab = gtk_table_new (5, 2, FALSE); +#endif gtk_box_pack_end (GTK_BOX (box), tab, FALSE, FALSE, 0); while (list) @@ -2323,7 +2361,12 @@ mg_create_topicbar (session *sess, GtkWidget *box) GtkWidget *hbox, *topic, *bbox; session_gui *gui = sess->gui; +#if HAVE_GTK3 + gui->topic_bar = hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); +#else gui->topic_bar = hbox = gtk_hbox_new (FALSE, 0); +#endif gtk_box_pack_start (GTK_BOX (box), hbox, 0, 0, 0); if (!gui->is_tab) @@ -2340,11 +2383,21 @@ mg_create_topicbar (session *sess, GtkWidget *box) if (prefs.hex_gui_input_style) mg_apply_entry_style (topic); +#if HAVE_GTK3 + gui->topicbutton_box = bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (bbox), FALSE); +#else gui->topicbutton_box = bbox = gtk_hbox_new (FALSE, 0); +#endif gtk_box_pack_start (GTK_BOX (hbox), bbox, 0, 0, 0); mg_create_chanmodebuttons (gui, bbox); +#if HAVE_GTK3 + gui->dialogbutton_box = bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (bbox), FALSE); +#else gui->dialogbutton_box = bbox = gtk_hbox_new (FALSE, 0); +#endif gtk_box_pack_start (GTK_BOX (hbox), bbox, 0, 0, 0); mg_create_dialogbuttons (bbox); } @@ -2493,9 +2546,19 @@ mg_create_textarea (session *sess, GtkWidget *box) {"HEXCHAT_USERLIST", GTK_TARGET_SAME_APP, 75 } }; + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + #else vbox = gtk_vbox_new (FALSE, 0); + #endif gtk_container_add (GTK_CONTAINER (box), vbox); + #if HAVE_GTK3 + inbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); + gtk_box_set_homogeneous (GTK_BOX (inbox), FALSE); + #else inbox = gtk_hbox_new (FALSE, 2); + #endif gtk_container_add (GTK_CONTAINER (vbox), inbox); frame = gtk_frame_new (NULL); @@ -2545,7 +2608,12 @@ mg_create_infoframe (GtkWidget *box) gtk_frame_set_shadow_type ((GtkFrame*)frame, GTK_SHADOW_OUT); gtk_container_add (GTK_CONTAINER (box), frame); + #if HAVE_GTK3 + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); + #else hbox = gtk_hbox_new (0, 0); + #endif gtk_container_add (GTK_CONTAINER (frame), hbox); label = gtk_label_new (NULL); @@ -2559,12 +2627,22 @@ mg_create_meters (session_gui *gui, GtkWidget *parent_box) { GtkWidget *infbox, *wid, *box; + #if HAVE_GTK3 + gui->meter_box = infbox = box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); + gtk_box_set_homogeneous (GTK_BOX (box), FALSE); + #else gui->meter_box = infbox = box = gtk_vbox_new (0, 1); + #endif gtk_box_pack_start (GTK_BOX (parent_box), box, 0, 0, 0); if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2)) { + #if HAVE_GTK3 + infbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (infbox), FALSE); + #else infbox = gtk_hbox_new (0, 0); + #endif gtk_box_pack_start (GTK_BOX (box), infbox, 0, 0, 0); } @@ -2625,7 +2703,12 @@ mg_create_userlist (session_gui *gui, GtkWidget *box) { GtkWidget *frame, *ulist, *vbox; + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + #else vbox = gtk_vbox_new (0, 1); + #endif gtk_container_add (GTK_CONTAINER (box), vbox); frame = gtk_frame_new (NULL); @@ -2737,13 +2820,23 @@ mg_create_center (session *sess, session_gui *gui, GtkWidget *box) gtk_notebook_set_show_border (GTK_NOTEBOOK (book), FALSE); gtk_paned_pack1 (GTK_PANED (gui->hpane_right), book, TRUE, TRUE); + #if HAVE_GTK3 + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); + #else hbox = gtk_hbox_new (FALSE, 0); + #endif gtk_paned_pack1 (GTK_PANED (gui->vpane_right), hbox, FALSE, TRUE); mg_create_userlist (gui, hbox); gui->user_box = hbox; + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + #else vbox = gtk_vbox_new (FALSE, 3); + #endif gtk_notebook_append_page (GTK_NOTEBOOK (book), vbox, NULL); mg_create_topicbar (sess, vbox); @@ -2833,8 +2926,13 @@ mg_place_userlist_and_chanview_real (session_gui *gui, GtkWidget *userlist, GtkW /* incase the previous pos was POS_HIDDEN */ gtk_widget_show (chanview); +#if HAVE_GTK3 + gtk_widget_set_margin_top (chanview, 0); + gtk_widget_set_margin_bottom (chanview, 0); +#else gtk_table_set_row_spacing (GTK_TABLE (gui->main_table), 1, 0); gtk_table_set_row_spacing (GTK_TABLE (gui->main_table), 2, 2); +#endif /* then place them back in their new positions */ switch (prefs.hex_gui_tab_pos) @@ -2852,25 +2950,47 @@ mg_place_userlist_and_chanview_real (session_gui *gui, GtkWidget *userlist, GtkW gtk_paned_pack2 (GTK_PANED (gui->vpane_right), chanview, FALSE, TRUE); break; case POS_TOP: +#if HAVE_GTK3 + gtk_widget_set_margin_bottom (chanview, GUI_SPACING - 1); + gtk_grid_attach (GTK_GRID (gui->main_table), chanview, + 1, 1, 1, 1); +#else gtk_table_set_row_spacing (GTK_TABLE (gui->main_table), 1, GUI_SPACING-1); gtk_table_attach (GTK_TABLE (gui->main_table), chanview, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); +#endif break; case POS_HIDDEN: gtk_widget_hide (chanview); /* always attach it to something to avoid ref_count=0 */ if (prefs.hex_gui_ulist_pos == POS_TOP) +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (gui->main_table), chanview, + 1, 3, 1, 1); +#else gtk_table_attach (GTK_TABLE (gui->main_table), chanview, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); +#endif else +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (gui->main_table), chanview, + 1, 1, 1, 1); +#else gtk_table_attach (GTK_TABLE (gui->main_table), chanview, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); +#endif break; default:/* POS_BOTTOM */ +#if HAVE_GTK3 + gtk_widget_set_margin_top (chanview, 3); + gtk_grid_attach (GTK_GRID (gui->main_table), chanview, + 1, 3, 1, 1); +#else gtk_table_set_row_spacing (GTK_TABLE (gui->main_table), 2, 3); gtk_table_attach (GTK_TABLE (gui->main_table), chanview, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); +#endif } } @@ -3274,7 +3394,12 @@ mg_create_search(session *sess, GtkWidget *box) GtkWidget *entry, *label, *next, *previous, *highlight, *matchcase, *regex, *close; session_gui *gui = sess->gui; + #if HAVE_GTK3 + gui->shbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); + gtk_box_set_homogeneous (GTK_BOX (gui->shbox), FALSE); + #else gui->shbox = gtk_hbox_new(FALSE, 5); + #endif gtk_box_pack_start(GTK_BOX(box), gui->shbox, FALSE, FALSE, 0); close = gtk_button_new (); @@ -3340,10 +3465,20 @@ mg_create_entry (session *sess, GtkWidget *box) GtkWidget *hbox, *but, *entry, *emoji_button; session_gui *gui = sess->gui; + #if HAVE_GTK3 + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); + #else hbox = gtk_hbox_new (FALSE, 0); + #endif gtk_box_pack_start (GTK_BOX (box), hbox, 0, 0, 0); + #if HAVE_GTK3 + gui->nick_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (gui->nick_box), FALSE); + #else gui->nick_box = gtk_hbox_new (FALSE, 0); + #endif gtk_box_pack_start (GTK_BOX (hbox), gui->nick_box, 0, 0, 0); gui->nick_label = but = gtk_button_new_with_label (sess->server->nick); @@ -3489,8 +3624,14 @@ mg_create_menu (session_gui *gui, GtkWidget *table, int away_state) gui->menu = menu_create_main (accel_group, TRUE, away_state, !gui->is_tab, gui->menu_item); +#if HAVE_GTK3 + gtk_grid_attach (GTK_GRID (table), gui->menu, 0, 0, 3, 1); + gtk_widget_set_hexpand (gui->menu, TRUE); + gtk_widget_set_halign (gui->menu, GTK_ALIGN_FILL); +#else gtk_table_attach (GTK_TABLE (table), gui->menu, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); +#endif } static void @@ -3499,9 +3640,17 @@ mg_create_irctab (session *sess, GtkWidget *table) GtkWidget *vbox; session_gui *gui = sess->gui; + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + gtk_grid_attach (GTK_GRID (table), vbox, 1, 2, 1, 1); + gtk_widget_set_hexpand (vbox, TRUE); + gtk_widget_set_vexpand (vbox, TRUE); + #else vbox = gtk_vbox_new (FALSE, 0); gtk_table_attach (GTK_TABLE (table), vbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + #endif mg_create_center (sess, gui, vbox); } @@ -3534,12 +3683,20 @@ mg_create_topwindow (session *sess) palette_alloc (win); + #if HAVE_GTK3 + table = gtk_grid_new (); + /* spacing under the menubar */ + gtk_grid_set_row_spacing (GTK_GRID (table), GUI_SPACING); + /* left and right borders */ + gtk_grid_set_column_spacing (GTK_GRID (table), 1); + #else table = gtk_table_new (4, 3, FALSE); /* spacing under the menubar */ gtk_table_set_row_spacing (GTK_TABLE (table), 0, GUI_SPACING); /* left and right borders */ gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 1); + #endif gtk_container_add (GTK_CONTAINER (win), table); mg_create_irctab (sess, table); @@ -3695,12 +3852,20 @@ mg_create_tabwindow (session *sess) palette_alloc (win); + #if HAVE_GTK3 + sess->gui->main_table = table = gtk_grid_new (); + /* spacing under the menubar */ + gtk_grid_set_row_spacing (GTK_GRID (table), GUI_SPACING); + /* left and right borders */ + gtk_grid_set_column_spacing (GTK_GRID (table), 1); + #else sess->gui->main_table = table = gtk_table_new (4, 3, FALSE); /* spacing under the menubar */ gtk_table_set_row_spacing (GTK_TABLE (table), 0, GUI_SPACING); /* left and right borders */ gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 1); + #endif gtk_container_add (GTK_CONTAINER (win), table); mg_create_irctab (sess, table); @@ -3855,7 +4020,12 @@ fe_dlgbuttons_update (session *sess) gtk_widget_destroy (gui->dialogbutton_box); + #if HAVE_GTK3 + gui->dialogbutton_box = box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous (GTK_BOX (box), FALSE); + #else gui->dialogbutton_box = box = gtk_hbox_new (0, 0); + #endif gtk_box_pack_start (GTK_BOX (gui->topic_bar), box, 0, 0, 0); gtk_box_reorder_child (GTK_BOX (gui->topic_bar), box, 3); mg_create_dialogbuttons (box); @@ -4008,7 +4178,12 @@ mg_create_generic_tab (char *name, char *title, int force_toplevel, if (force_toplevel || !prefs.hex_gui_tab_utils) { win = gtkutil_window_new (title, name, width, height, 2); + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + #else vbox = gtk_vbox_new (0, 0); + #endif *vbox_ret = vbox; gtk_container_add (GTK_CONTAINER (win), vbox); gtk_widget_show (vbox); @@ -4018,7 +4193,12 @@ mg_create_generic_tab (char *name, char *title, int force_toplevel, return win; } + #if HAVE_GTK3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); + gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE); + #else vbox = gtk_vbox_new (0, 2); + #endif g_object_set_data (G_OBJECT (vbox), "w", GINT_TO_POINTER (width)); g_object_set_data (G_OBJECT (vbox), "h", GINT_TO_POINTER (height)); gtk_container_set_border_width (GTK_CONTAINER (vbox), 3); diff --git a/src/fe-gtk/meson.build b/src/fe-gtk/meson.build index 3248857c..6c90f0c0 100644 --- a/src/fe-gtk/meson.build +++ b/src/fe-gtk/meson.build @@ -28,7 +28,16 @@ zoitechat_gtk_sources = [ 'xtext.c' ] -gtk_dep = dependency('gtk+-2.0', version: '>= 2.24.0') +zoitechat_gtk_cflags = [] + +if get_option('gtk3') + gtk_dep = dependency('gtk+-3.0', version: '>= 3.22') + zoitechat_gtk_cflags += '-DHAVE_GTK3' +else + gtk_dep = dependency('gtk+-2.0', version: '>= 2.24.0') + zoitechat_gtk_cflags += '-DHAVE_GTK2' +endif + zoitechat_gtk_deps = [ zoitechat_common_dep, libgmodule_dep, # used by libsexy @@ -39,8 +48,6 @@ if gtk_dep.get_pkgconfig_variable('target') == 'x11' zoitechat_gtk_deps += dependency('x11') endif -zoitechat_gtk_cflags = [] - zoitechat_gtk_ldflags = [] if host_machine.system() == 'windows'