This commit is contained in:
2026-03-23 14:46:23 -06:00
parent 21c73e699b
commit 65707f53b7
6 changed files with 54 additions and 4 deletions

View File

@@ -411,6 +411,7 @@ const struct prefs vars[] =
{"gui_chanlist_width_topic", P_OFFINT (hex_gui_chanlist_width_topic), TYPE_INT}, {"gui_chanlist_width_topic", P_OFFINT (hex_gui_chanlist_width_topic), TYPE_INT},
{"gui_chanlist_width_users", P_OFFINT (hex_gui_chanlist_width_users), TYPE_INT}, {"gui_chanlist_width_users", P_OFFINT (hex_gui_chanlist_width_users), TYPE_INT},
{"gui_compact", P_OFFINT (hex_gui_compact), TYPE_BOOL}, {"gui_compact", P_OFFINT (hex_gui_compact), TYPE_BOOL},
{"gui_ctrlq_quit", P_OFFINT (hex_gui_ctrlq_quit), TYPE_BOOL},
{"gui_dialog_height", P_OFFINT (hex_gui_dialog_height), TYPE_INT}, {"gui_dialog_height", P_OFFINT (hex_gui_dialog_height), TYPE_INT},
{"gui_dialog_left", P_OFFINT (hex_gui_dialog_left), TYPE_INT}, {"gui_dialog_left", P_OFFINT (hex_gui_dialog_left), TYPE_INT},
{"gui_dialog_top", P_OFFINT (hex_gui_dialog_top), TYPE_INT}, {"gui_dialog_top", P_OFFINT (hex_gui_dialog_top), TYPE_INT},
@@ -765,6 +766,7 @@ load_default_config(void)
#ifdef HAVE_GTK_MAC #ifdef HAVE_GTK_MAC
prefs.hex_gui_hide_menu = 1; prefs.hex_gui_hide_menu = 1;
#endif #endif
prefs.hex_gui_ctrlq_quit = 1;
prefs.hex_gui_input_attr = 1; prefs.hex_gui_input_attr = 1;
prefs.hex_gui_input_icon = 1; prefs.hex_gui_input_icon = 1;
prefs.hex_gui_input_nick = 1; prefs.hex_gui_input_nick = 1;

View File

@@ -122,6 +122,7 @@ struct zoitechatprefs
unsigned int hex_gui_autoopen_recv; unsigned int hex_gui_autoopen_recv;
unsigned int hex_gui_autoopen_send; unsigned int hex_gui_autoopen_send;
unsigned int hex_gui_compact; unsigned int hex_gui_compact;
unsigned int hex_gui_ctrlq_quit;
unsigned int hex_gui_filesize_iec; unsigned int hex_gui_filesize_iec;
unsigned int hex_gui_focus_omitalerts; unsigned int hex_gui_focus_omitalerts;
unsigned int hex_gui_hide_menu; unsigned int hex_gui_hide_menu;

View File

@@ -170,7 +170,7 @@ typedef struct session_gui
GtkWidget *shbox, *shentry; /* search bar hbox */ GtkWidget *shbox, *shentry; /* search bar hbox */
gulong search_changed_signal; /* hook for search change event so blanking the box doesn't suck */ gulong search_changed_signal; /* hook for search change event so blanking the box doesn't suck */
#define MENU_ID_NUM 14 #define MENU_ID_NUM 15
GtkWidget *menu_item[MENU_ID_NUM+1]; /* some items we may change state of */ GtkWidget *menu_item[MENU_ID_NUM+1]; /* some items we may change state of */
void *chanview; /* chanview.h */ void *chanview; /* chanview.h */

View File

@@ -1802,6 +1802,44 @@ menu_change_layout (void)
} }
} }
void
menu_update_quit_accel (void)
{
GSList *list;
list = sess_list;
while (list)
{
session *sess = list->data;
session_gui *gui = sess->gui;
GtkWidget *item;
GtkAccelGroup *accel_group;
int enabled;
list = list->next;
if (!gui)
continue;
item = gui->menu_item[MENU_ID_QUIT];
if (!item)
continue;
enabled = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "zc-ctrlq-enabled"));
if (enabled == (int)prefs.hex_gui_ctrlq_quit)
continue;
accel_group = g_object_get_data (G_OBJECT (item), "zc-quit-accel-group");
if (!accel_group)
continue;
if (prefs.hex_gui_ctrlq_quit)
gtk_widget_add_accelerator (item, "activate", accel_group, GDK_KEY_q, STATE_CTRL, GTK_ACCEL_VISIBLE);
else
gtk_widget_remove_accelerator (item, accel_group, GDK_KEY_q, STATE_CTRL);
g_object_set_data (G_OBJECT (item), "zc-ctrlq-enabled", GINT_TO_POINTER (prefs.hex_gui_ctrlq_quit));
}
}
static void static void
menu_layout_cb (GtkWidget *item, gpointer none) menu_layout_cb (GtkWidget *item, gpointer none)
{ {
@@ -1977,7 +2015,7 @@ static struct mymenu mymenu[] = {
#define CLOSE_OFFSET (13) #define CLOSE_OFFSET (13)
{0, menu_close, 0, M_MENUITEM, 0, 0, 1}, {0, menu_close, 0, M_MENUITEM, 0, 0, 1},
{0, 0, 0, M_SEP, 0, 0, 0}, {0, 0, 0, M_SEP, 0, 0, 0},
{N_("_Quit"), menu_quit, 0, M_MENUITEM, 0, 0, 1, GDK_KEY_q}, /* 15 */ {N_("_Quit"), menu_quit, 0, M_MENUITEM, MENU_ID_QUIT, 0, 1, GDK_KEY_q}, /* 15 */
{N_("_View"), 0, 0, M_NEWMENU, 0, 0, 1}, {N_("_View"), 0, 0, M_NEWMENU, 0, 0, 1},
#define MENUBAR_OFFSET (17) #define MENUBAR_OFFSET (17)
@@ -2661,7 +2699,7 @@ menu_create_main (void *accel_group, int bar, int away, int toplevel,
case M_MENUITEM: case M_MENUITEM:
item = gtk_menu_item_new_with_mnemonic (_(mymenu[i].text)); item = gtk_menu_item_new_with_mnemonic (_(mymenu[i].text));
normalitem: normalitem:
if (mymenu[i].key != 0) if (mymenu[i].key != 0 && !(mymenu[i].id == MENU_ID_QUIT && !prefs.hex_gui_ctrlq_quit))
gtk_widget_add_accelerator (item, "activate", accel_group, gtk_widget_add_accelerator (item, "activate", accel_group,
mymenu[i].key, mymenu[i].key,
mymenu[i].key == GDK_KEY_F1 ? 0 : mymenu[i].key == GDK_KEY_F1 ? 0 :
@@ -2671,6 +2709,11 @@ normalitem:
STATE_SHIFT | STATE_CTRL : STATE_SHIFT | STATE_CTRL :
STATE_CTRL, STATE_CTRL,
GTK_ACCEL_VISIBLE); GTK_ACCEL_VISIBLE);
if (mymenu[i].id == MENU_ID_QUIT)
{
g_object_set_data (G_OBJECT (item), "zc-quit-accel-group", accel_group);
g_object_set_data (G_OBJECT (item), "zc-ctrlq-enabled", GINT_TO_POINTER (prefs.hex_gui_ctrlq_quit));
}
if (mymenu[i].callback) if (mymenu[i].callback)
g_signal_connect (G_OBJECT (item), "activate", g_signal_connect (G_OBJECT (item), "activate",
G_CALLBACK (mymenu[i].callback), 0); G_CALLBACK (mymenu[i].callback), 0);

View File

@@ -38,6 +38,7 @@ void menu_create (GtkWidget *menu, GSList *list, char *target, int check_path);
void menu_bar_toggle (void); void menu_bar_toggle (void);
void menu_add_plugin_items (GtkWidget *menu, char *root, char *target); void menu_add_plugin_items (GtkWidget *menu, char *root, char *target);
void menu_change_layout (void); void menu_change_layout (void);
void menu_update_quit_accel (void);
void menu_set_away (session_gui *gui, int away); void menu_set_away (session_gui *gui, int away);
void menu_set_fullscreen (session_gui *gui, int fullscreen); void menu_set_fullscreen (session_gui *gui, int fullscreen);
@@ -63,8 +64,9 @@ void menu_set_fullscreen (session_gui *gui, int fullscreen);
#define MENU_ID_USERMENU 12 #define MENU_ID_USERMENU 12
#define MENU_ID_FULLSCREEN 13 #define MENU_ID_FULLSCREEN 13
#define MENU_ID_ZOITECHAT 14 #define MENU_ID_ZOITECHAT 14
#define MENU_ID_QUIT 15
#if (MENU_ID_NUM < MENU_ID_ZOITECHAT) #if (MENU_ID_NUM < MENU_ID_QUIT)
#error MENU_ID_NUM is set wrong #error MENU_ID_NUM is set wrong
#endif #endif

View File

@@ -536,6 +536,7 @@ static const setting general_settings[] =
{ST_TOGGLE, N_("WHOIS on notify"), P_OFFINTNL(hex_notify_whois_online), N_("Sends a /WHOIS when a user comes online in your notify list."), 0, 0}, {ST_TOGGLE, N_("WHOIS on notify"), P_OFFINTNL(hex_notify_whois_online), N_("Sends a /WHOIS when a user comes online in your notify list."), 0, 0},
{ST_TOGGLE, N_("Hide join and part messages"), P_OFFINTNL(hex_irc_conf_mode), N_("Hide channel join/part messages by default."), 0, 0}, {ST_TOGGLE, N_("Hide join and part messages"), P_OFFINTNL(hex_irc_conf_mode), N_("Hide channel join/part messages by default."), 0, 0},
{ST_TOGGLE, N_("Hide nick change messages"), P_OFFINTNL(hex_irc_hide_nickchange), 0, 0, 0}, {ST_TOGGLE, N_("Hide nick change messages"), P_OFFINTNL(hex_irc_hide_nickchange), 0, 0, 0},
{ST_TOGGLE, N_("Enable Ctrl+Q to quit"), P_OFFINTNL(hex_gui_ctrlq_quit), 0, 0, 0},
{ST_END, 0, 0, 0, 0, 0} {ST_END, 0, 0, 0, 0, 0}
}; };
@@ -2070,6 +2071,7 @@ setup_apply_real (const ThemeChangedEvent *event)
} }
mg_apply_setup (); mg_apply_setup ();
menu_update_quit_accel ();
tray_apply_setup (); tray_apply_setup ();
zoitechat_reinit_timers (); zoitechat_reinit_timers ();