1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Added win_get_title

This commit is contained in:
James Booth 2014-12-21 22:01:56 +00:00
parent d41ac71d27
commit 0c1bbb63c0
9 changed files with 87 additions and 142 deletions

View File

@ -2289,16 +2289,13 @@ cmd_form(gchar **args, struct cmd_help_t help)
return TRUE;
}
gchar **split_recipient = g_strsplit(confwin->from, " ", 2);
char *roomjid = split_recipient[0];
if (g_strcmp0(args[0], "submit") == 0) {
iq_submit_room_config(roomjid, confwin->form);
iq_submit_room_config(confwin->roomjid, confwin->form);
}
if (g_strcmp0(args[0], "cancel") == 0) {
iq_room_config_cancel(roomjid);
iq_room_config_cancel(confwin->roomjid);
}
if ((g_strcmp0(args[0], "submit") == 0) || (g_strcmp0(args[0], "cancel") == 0)) {
@ -2306,7 +2303,7 @@ cmd_form(gchar **args, struct cmd_help_t help)
cmd_autocomplete_remove_form_fields(confwin->form);
}
wins_close_current();
ProfWin *current = (ProfWin*)wins_get_muc(roomjid);
ProfWin *current = (ProfWin*)wins_get_muc(confwin->roomjid);
if (current == NULL) {
current = wins_get_console();
}
@ -2314,8 +2311,6 @@ cmd_form(gchar **args, struct cmd_help_t help)
ui_switch_win(num);
}
g_strfreev(split_recipient);
return TRUE;
}
@ -2617,10 +2612,7 @@ cmd_room(gchar **args, struct cmd_help_t help)
}
if (g_strcmp0(args[0], "config") == 0) {
GString *win_title = g_string_new(mucwin->roomjid);
g_string_append(win_title, " config");
ProfMucConfWin *confwin = wins_get_muc_conf(win_title->str);
g_string_free(win_title, TRUE);
ProfMucConfWin *confwin = wins_get_muc_conf(mucwin->roomjid);
if (confwin != NULL) {
num = wins_get_num(window);

View File

@ -861,9 +861,7 @@ _ui_switch_win(const int i)
status_bar_current(1);
status_bar_active(1);
} else {
GString *recipient_str = win_get_recipient_string(new_current);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
status_bar_current(i);
status_bar_active(i);
}
@ -898,9 +896,7 @@ _ui_previous_win(void)
status_bar_current(1);
status_bar_active(1);
} else {
GString *recipient_str = win_get_recipient_string(new_current);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
status_bar_current(i);
status_bar_active(i);
}
@ -931,9 +927,7 @@ _ui_next_win(void)
status_bar_current(1);
status_bar_active(1);
} else {
GString *recipient_str = win_get_recipient_string(new_current);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
status_bar_current(i);
status_bar_active(i);
}
@ -963,9 +957,7 @@ _ui_gone_secure(const char * const barejid, gboolean trusted)
}
if (wins_is_current(window)) {
GString *recipient_str = win_get_recipient_string(window);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
} else {
int num = wins_get_num(window);
status_bar_new(num);
@ -990,9 +982,7 @@ _ui_gone_insecure(const char * const barejid)
ProfWin *window = (ProfWin*)chatwin;
win_save_print(window, '!', NULL, 0, THEME_OTR_ENDED, "", "OTR session ended.");
if (wins_is_current(window)) {
GString *recipient_str = win_get_recipient_string(window);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
}
}
}
@ -1100,9 +1090,7 @@ _ui_trust(const char * const barejid)
ProfWin *window = (ProfWin*)chatwin;
win_save_print(window, '!', NULL, 0, THEME_OTR_TRUSTED, "", "OTR session trusted.");
if (wins_is_current(window)) {
GString *recipient_str = win_get_recipient_string(window);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
}
}
}
@ -1118,9 +1106,7 @@ _ui_untrust(const char * const barejid)
ProfWin *window = (ProfWin*)chatwin;
win_save_print(window, '!', NULL, 0, THEME_OTR_UNTRUSTED, "", "OTR session untrusted.");
if (wins_is_current(window)) {
GString *recipient_str = win_get_recipient_string(window);
title_bar_set_recipient(recipient_str->str);
g_string_free(recipient_str, TRUE);
title_bar_switch();
}
}
}
@ -2605,10 +2591,7 @@ _ui_show_form(ProfMucConfWin *confwin)
win_save_print(window, '-', NULL, NO_EOL, 0, "", "Form title: ");
win_save_print(window, '-', NULL, NO_DATE, 0, "", confwin->form->title);
} else {
gchar **split_recipient = g_strsplit(confwin->from, " ", 2);
char *roomjid = split_recipient[0];
win_save_vprint(window, '-', NULL, 0, 0, "", "Configuration for room %s.", roomjid);
g_strfreev(split_recipient);
win_save_vprint(window, '-', NULL, 0, 0, "", "Configuration for room %s.", confwin->roomjid);
}
win_save_print(window, '-', NULL, 0, 0, "", "");
@ -2642,14 +2625,11 @@ _ui_show_form_field(ProfWin *window, DataForm *form, char *tag)
}
static void
_ui_handle_room_configuration(const char * const room, DataForm *form)
_ui_handle_room_configuration(const char * const roomjid, DataForm *form)
{
GString *title = g_string_new(room);
g_string_append(title, " config");
ProfWin *window = wins_new_muc_config(title->str, form);
ProfWin *window = wins_new_muc_config(roomjid, form);
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
assert(confwin->memcheck = PROFCONFWIN_MEMCHECK);
g_string_free(title, TRUE);
int num = wins_get_num(window);
ui_switch_win(num);

View File

@ -48,11 +48,7 @@
#include "ui/window.h"
#include "roster_list.h"
#define CONSOLE_TITLE "Profanity. Type /help for help information."
static WINDOW *win;
static char *current_title = NULL;
static char *current_recipient = NULL;
static contact_presence_t current_presence;
static gboolean typing;
@ -81,8 +77,8 @@ create_title_bar(void)
void
title_bar_update_virtual(void)
{
if (current_recipient != NULL) {
ProfWin *window = wins_get_current();
if (window->type != WIN_CONSOLE) {
if (typing_elapsed != NULL) {
gdouble seconds = g_timer_elapsed(typing_elapsed, NULL);
@ -112,16 +108,9 @@ void
title_bar_console(void)
{
werase(win);
if (current_recipient != NULL) {
free(current_recipient);
}
current_recipient = NULL;
typing = FALSE;
typing_elapsed = NULL;
free(current_title);
current_title = strdup(CONSOLE_TITLE);
_title_bar_draw();
}
@ -132,8 +121,9 @@ title_bar_set_presence(contact_presence_t presence)
_title_bar_draw();
}
// TODO remove
void
title_bar_set_recipient(const char * const recipient)
title_bar_switch(void)
{
if (typing_elapsed != NULL) {
g_timer_destroy(typing_elapsed);
@ -141,12 +131,6 @@ title_bar_set_recipient(const char * const recipient)
typing = FALSE;
}
free(current_recipient);
current_recipient = strdup(recipient);
free(current_title);
current_title = strdup(recipient);
_title_bar_draw();
}
@ -179,7 +163,9 @@ _title_bar_draw(void)
waddch(win, ' ');
}
mvwprintw(win, 0, 0, " %s", current_title);
char *title = win_get_title(current);
mvwprintw(win, 0, 0, " %s", title);
free(title);
if (current && current->type == WIN_CHAT) {
ProfChatWin *chatwin = (ProfChatWin*) current;
@ -193,12 +179,6 @@ _title_bar_draw(void)
if (typing) {
wprintw(win, " (typing...)");
}
} else if (current && current->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*) current;
assert(confwin->memcheck == PROFCONFWIN_MEMCHECK);
if (confwin->form->modified) {
wprintw(win, " *");
}
}
_show_self_presence();
@ -269,7 +249,7 @@ _show_privacy(ProfChatWin *chatwin)
{
int bracket_attrs = theme_attrs(THEME_TITLE_BRACKET);
if (chatwin->is_otr) {
if (!chatwin->is_otr) {
if (prefs_get_boolean(PREF_OTR_WARN)) {
int unencrypted_attrs = theme_attrs(THEME_TITLE_UNENCRYPTED);
wprintw(win, " ");

View File

@ -40,7 +40,7 @@ void title_bar_update_virtual(void);
void title_bar_resize(void);
void title_bar_console(void);
void title_bar_set_presence(contact_presence_t presence);
void title_bar_set_recipient(const char * const from);
void title_bar_switch(void);
void title_bar_set_typing(gboolean is_typing);
#endif

View File

@ -199,7 +199,7 @@ void (*ui_handle_recipient_error)(const char * const recipient, const char * con
void (*ui_handle_error)(const char * const err_msg);
void (*ui_clear_win_title)(void);
void (*ui_handle_room_join_error)(const char * const roomjid, const char * const err);
void (*ui_handle_room_configuration)(const char * const room, DataForm *form);
void (*ui_handle_room_configuration)(const char * const roomjid, DataForm *form);
void (*ui_handle_room_configuration_form_error)(const char * const roomjid, const char * const message);
void (*ui_handle_room_config_submit_result)(const char * const roomjid);
void (*ui_handle_room_config_submit_result_error)(const char * const roomjid, const char * const message);

View File

@ -52,7 +52,7 @@
#include "ui/window.h"
#include "xmpp/xmpp.h"
#define CONS_WIN_TITLE "_cons"
#define CONS_WIN_TITLE "Profanity. Type /help for help information."
#define XML_WIN_TITLE "XML Console"
#define CEILING(X) (X-(int)(X) > 0 ? (int)(X+1) : (int)(X))
@ -122,8 +122,6 @@ win_create_console(void)
new_win->window.layout = _win_create_split_layout();
new_win->window.unread = 0;
new_win->from = strdup(CONS_WIN_TITLE);
return &new_win->window;
}
@ -185,14 +183,14 @@ win_create_muc(const char * const roomjid)
}
ProfWin*
win_create_muc_config(const char * const title, DataForm *form)
win_create_muc_config(const char * const roomjid, DataForm *form)
{
ProfMucConfWin *new_win = malloc(sizeof(ProfMucConfWin));
new_win->window.type = WIN_MUC_CONFIG;
new_win->window.layout = _win_create_simple_layout();
new_win->window.unread = 0;
new_win->from = strdup(title);
new_win->roomjid = strdup(roomjid);
new_win->form = form;
new_win->memcheck = PROFCONFWIN_MEMCHECK;
@ -223,11 +221,54 @@ win_create_xmlconsole(void)
new_win->window.layout = _win_create_simple_layout();
new_win->window.unread = 0;
new_win->from = strdup(XML_WIN_TITLE);
new_win->memcheck = PROFXMLWIN_MEMCHECK;
return &new_win->window;
}
char *
win_get_title(ProfWin *window)
{
if (window == NULL) {
return strdup(CONS_WIN_TITLE);
}
if (window->type == WIN_CONSOLE) {
return strdup(CONS_WIN_TITLE);
}
if (window->type == WIN_CHAT) {
ProfChatWin *chatwin = (ProfChatWin*) window;
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
return strdup(chatwin->barejid);
}
if (window->type == WIN_MUC) {
ProfMucWin *mucwin = (ProfMucWin*) window;
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
return strdup(mucwin->roomjid);
}
if (window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*) window;
assert(confwin->memcheck == PROFCONFWIN_MEMCHECK);
GString *title = g_string_new(confwin->roomjid);
g_string_append(title, " config");
if (confwin->form->modified) {
g_string_append(title, " *");
}
char *title_str = title->str;
g_string_free(title, FALSE);
return title_str;
}
if (window->type == WIN_PRIVATE) {
ProfPrivateWin *privatewin = (ProfPrivateWin*) window;
assert(privatewin->memcheck == PROFPRIVATEWIN_MEMCHECK);
return strdup(privatewin->fulljid);
}
if (window->type == WIN_XML) {
return strdup(XML_WIN_TITLE);
}
return NULL;
}
void
win_hide_subwin(ProfWin *window)
{
@ -292,11 +333,6 @@ win_free(ProfWin* window)
free(chatwin->resource);
}
if (window->type == WIN_CONSOLE) {
ProfConsoleWin *consolewin = (ProfConsoleWin*)window;
free(consolewin->from);
}
if (window->type == WIN_MUC) {
ProfMucWin *mucwin = (ProfMucWin*)window;
free(mucwin->roomjid);
@ -304,7 +340,7 @@ win_free(ProfWin* window)
if (window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *mucconf = (ProfMucConfWin*)window;
free(mucconf->from);
free(mucconf->roomjid);
form_destroy(mucconf->form);
}
@ -313,52 +349,9 @@ win_free(ProfWin* window)
free(privatewin->fulljid);
}
if (window->type == WIN_XML) {
ProfXMLWin *xmlwin = (ProfXMLWin*)window;
free(xmlwin->from);
}
free(window);
}
GString *
win_get_recipient_string(ProfWin *window)
{
GString *result = g_string_new("");
if (window->type == WIN_CONSOLE) {
ProfConsoleWin *conswin = (ProfConsoleWin*)window;
g_string_append(result, conswin->from);
}
if (window->type == WIN_CHAT) {
ProfChatWin *chatwin = (ProfChatWin*)window;
PContact contact = roster_get_contact(chatwin->barejid);
if (p_contact_name(contact) != NULL) {
g_string_append(result, p_contact_name(contact));
} else {
g_string_append(result, chatwin->barejid);
}
}
if (window->type == WIN_MUC) {
ProfMucWin *mucwin = (ProfMucWin*)window;
g_string_append(result, mucwin->roomjid);
}
if (window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
g_string_append(result, confwin->from);
}
if (window->type == WIN_PRIVATE) {
ProfPrivateWin *privatewin = (ProfPrivateWin*)window;
g_string_append(result, privatewin->fulljid);
}
if (window->type == WIN_XML) {
ProfXMLWin *xmlwin = (ProfXMLWin*)window;
g_string_append(result, xmlwin->from);
}
return result;
}
void
win_update_virtual(ProfWin *window)
{

View File

@ -61,6 +61,7 @@
#define PROFMUCWIN_MEMCHECK 52345276
#define PROFPRIVATEWIN_MEMCHECK 77437483
#define PROFCONFWIN_MEMCHECK 64334685
#define PROFXMLWIN_MEMCHECK 87333463
typedef enum {
LAYOUT_SIMPLE,
@ -103,7 +104,6 @@ typedef struct prof_win_t {
typedef struct prof_console_win_t {
ProfWin window;
char *from;
} ProfConsoleWin;
typedef struct prof_chat_win_t {
@ -124,7 +124,7 @@ typedef struct prof_muc_win_t {
typedef struct prof_mucconf_win_t {
ProfWin window;
char *from;
char *roomjid;
DataForm *form;
unsigned long memcheck;
} ProfMucConfWin;
@ -137,7 +137,7 @@ typedef struct prof_private_win_t {
typedef struct prof_xml_win_t {
ProfWin window;
char *from;
unsigned long memcheck;
} ProfXMLWin;
ProfWin* win_create_console(void);
@ -147,6 +147,8 @@ ProfWin* win_create_muc_config(const char * const title, DataForm *form);
ProfWin* win_create_private(const char * const fulljid);
ProfWin* win_create_xmlconsole(void);
char *win_get_title(ProfWin *window);
void win_free(ProfWin *window);
void win_update_virtual(ProfWin *window);
void win_move_to_end(ProfWin *window);
@ -170,7 +172,6 @@ void win_show_subwin(ProfWin *window);
int win_roster_cols(void);
int win_occpuants_cols(void);
void win_printline_nowrap(WINDOW *win, char *msg);
GString* win_get_recipient_string(ProfWin *window);
gboolean win_has_active_subwin(ProfWin *window);
gboolean win_has_modified_form(ProfWin *window);

View File

@ -36,6 +36,7 @@
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <glib.h>
@ -99,7 +100,7 @@ wins_get_chat(const char * const barejid)
}
ProfMucConfWin *
wins_get_muc_conf(const char * const title)
wins_get_muc_conf(const char * const roomjid)
{
GList *values = g_hash_table_get_values(windows);
GList *curr = values;
@ -108,7 +109,7 @@ wins_get_muc_conf(const char * const title)
ProfWin *window = curr->data;
if (window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
if (g_strcmp0(confwin->from, title) == 0) {
if (g_strcmp0(confwin->roomjid, roomjid) == 0) {
g_list_free(values);
return confwin;
}
@ -449,11 +450,11 @@ wins_new_muc(const char * const roomjid)
}
ProfWin *
wins_new_muc_config(const char * const title, DataForm *form)
wins_new_muc_config(const char * const roomjid, DataForm *form)
{
GList *keys = g_hash_table_get_keys(windows);
int result = get_next_available_win_num(keys);
ProfWin *newwin = win_create_muc_config(title, form);
ProfWin *newwin = win_create_muc_config(roomjid, form);
g_hash_table_insert(windows, GINT_TO_POINTER(result), newwin);
g_list_free(keys);
return newwin;
@ -857,13 +858,11 @@ wins_create_summary(void)
case WIN_MUC_CONFIG:
muc_config_string = g_string_new("");
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
g_string_printf(muc_config_string, "%d: %s", ui_index, confwin->from);
if (win_has_modified_form(window)) {
g_string_append(muc_config_string, " *");
}
char *title = win_get_title(window);
g_string_printf(muc_config_string, "%d: %s", ui_index, title);
result = g_slist_append(result, strdup(muc_config_string->str));
g_string_free(muc_config_string, TRUE);
free(title);
break;

View File

@ -40,13 +40,13 @@ void wins_init(void);
ProfWin * wins_new_xmlconsole(void);
ProfWin * wins_new_chat(const char * const barejid);
ProfWin * wins_new_muc(const char * const roomjid);
ProfWin * wins_new_muc_config(const char * const title, DataForm *form);
ProfWin * wins_new_muc_config(const char * const roomjid, DataForm *form);
ProfWin * wins_new_private(const char * const fulljid);
ProfWin * wins_get_console(void);
ProfChatWin *wins_get_chat(const char * const barejid);
ProfMucWin * wins_get_muc(const char * const roomjid);
ProfMucConfWin * wins_get_muc_conf(const char * const title);
ProfMucConfWin * wins_get_muc_conf(const char * const roomjid);
ProfPrivateWin *wins_get_private(const char * const fulljid);
ProfWin * wins_get_current(void);