AmendHub

Download:

jcs

/

wallops

/

amendments

/

76

chatter: Implement Cmd+W to close a query tab or part a channel


jcs made amendment 76 about 1 month ago
--- chatter.c Mon Sep 9 16:49:01 2024 +++ chatter.c Tue Sep 10 09:32:08 2024 @@ -78,6 +78,7 @@ chatter_init(const char *server, const unsigned short xfree(&chatter); return NULL; } + chatter->focusable = focusable; width = screenBits.bounds.right - screenBits.bounds.left - padding; width = MIN(width, 640); @@ -128,7 +129,6 @@ chatter_init(const char *server, const unsigned short focusable->update_menu = chatter_update_menu; focusable->resume = chatter_resume; focusable_add(focusable); - chatter->focusable = focusable; chatter_update_menu(focusable); @@ -254,7 +254,7 @@ chatter_add_tab(struct chatter *chatter, Rect *win_bou if (conn) chatter_reveal_shadow(chatter); - + return tab; } @@ -404,6 +404,8 @@ chatter_focus_tab(struct chatter *chatter, struct chat DrawControls(chatter->win); chatter_draw_tab_bar(chatter); + + chatter_update_menu(chatter->focusable); } void @@ -956,6 +958,15 @@ chatter_menu(struct focusable *focusable, short menu, TEPaste(chatter->input_te); return true; } + break; + case VIEW_MENU_ID: + switch (item) { + case VIEW_MENU_CLOSE_ID: + if (chatter->current_tab->query_nick[0] || + chatter->current_tab->channel) + chatter_close_tab(chatter, chatter->current_tab); + return true; + } } return false; @@ -971,7 +982,13 @@ chatter_update_menu(struct focusable *focusable) HLock(tab->messages_te); EnableItem(view_menu, VIEW_MENU_HIDE_ID); - + + if (chatter->current_tab->query_nick[0] || + chatter->current_tab->channel) + EnableItem(view_menu, VIEW_MENU_CLOSE_ID); + else + DisableItem(view_menu, VIEW_MENU_CLOSE_ID); + EnableItem(edit_menu, EDIT_MENU_PASTE_ID); if ((*(chatter->input_te))->selStart != (*(chatter->input_te))->selEnd) { @@ -1304,6 +1321,11 @@ chatter_close_tab(struct chatter *chatter, struct chat chatter_focus_tab(chatter, next_tab); chatter_reveal_shadow(chatter); + + if (tab->channel) + irc_part_channel(tab->conn, tab->channel); + + chatter_update_menu(chatter->focusable); } void --- chatter.h Sun Sep 8 21:38:55 2024 +++ chatter.h Tue Sep 10 08:49:49 2024 @@ -46,6 +46,7 @@ #define VIEW_MENU_ID 131 #define VIEW_MENU_HIDE_ID 1 +#define VIEW_MENU_CLOSE_ID 2 #define WAIT_TYPE_NONE (1 << 0) #define WAIT_TYPE_BACKGROUND (1 << 1) --- irc.c Mon Sep 9 16:32:40 2024 +++ irc.c Tue Sep 10 09:16:30 2024 @@ -928,11 +928,12 @@ irc_process_input(struct irc_connection *conn, struct return; } if (strcasecmp(arg0, "close") == 0) { - if (conn->chatter->current_tab->query_nick[0]) + if (conn->chatter->current_tab->query_nick[0] || + conn->chatter->current_tab->channel) chatter_close_tab(conn->chatter, conn->chatter->current_tab); else chatter_printf(conn->chatter, conn, NULL, - "not a query window", + "cannot close server tab, use /disconnect", arg0); return; } @@ -1118,6 +1119,12 @@ irc_quit_with_message(struct irc_connection *conn, cha else irc_printf(conn, "QUIT :%s %s on a %s\r\n", PROGRAM_NAME, get_version(false), gestalt_machine_type()); +} + +void +irc_part_channel(struct irc_connection *conn, struct irc_channel *channel) +{ + irc_printf(conn, "PART %s\r\n", channel->name); } void --- irc.h Sun Sep 8 21:23:00 2024 +++ irc.h Tue Sep 10 09:17:34 2024 @@ -109,5 +109,7 @@ void irc_abort(struct irc_connection *conn); void irc_close(struct irc_connection *conn); void irc_process_input(struct irc_connection *conn, struct irc_channel *channel, char *query_nick, char *input); - +void irc_part_channel(struct irc_connection *conn, + struct irc_channel *channel); + #endif \ No newline at end of file --- main.c Mon Sep 9 08:44:37 2024 +++ main.c Tue Sep 10 09:29:25 2024 @@ -334,12 +334,13 @@ handle_menu(long menu_id) ret = true; break; #endif - default: - if (nfocusables && focusables[0]->visible && focusables[0]->menu) - ret = focusables[0]->menu(focusables[0], HiWord(menu_id), - LoWord(menu_id)); } + if (!ret && nfocusables && focusables[0]->visible && + focusables[0]->menu) + ret = focusables[0]->menu(focusables[0], HiWord(menu_id), + LoWord(menu_id)); + HiliteMenu(0); return ret; } @@ -383,9 +384,10 @@ update_menu(void) } } - if (hidden) + if (hidden) { SetItem(view_menu, VIEW_MENU_HIDE_ID, "\pShow Windows"); - else + DisableItem(view_menu, VIEW_MENU_CLOSE_ID); + } else SetItem(view_menu, VIEW_MENU_HIDE_ID, "\pHide Windows"); if (nfocusables && focusables[0]->visible && @@ -397,6 +399,8 @@ update_menu(void) DisableItem(edit_menu, EDIT_MENU_CUT_ID); DisableItem(edit_menu, EDIT_MENU_COPY_ID); DisableItem(edit_menu, EDIT_MENU_PASTE_ID); + + DisableItem(view_menu, VIEW_MENU_HIDE_ID); } void --- wallops.π.r Thu Sep 5 10:11:44 2024 +++ wallops.π.r Tue Sep 10 09:36:37 2024 @@ -20,7 +20,8 @@ data 'MENU' (130) { data 'MENU' (131) { $"0083 0000 0000 0000 0000 FFFF FFFF 0456" /* .É.............V */ $"6965 770C 4869 6465 2057 696E 646F 7773" /* iew.Hide Windows */ - $"0048 0000 00" /* .H... */ + $"0048 0000 0943 6C6F 7365 2054 6162 0057" /* .H..∆Close Tab.W */ + $"0000 00" /* ... */ }; data 'MBAR' (128) {