mirror of
https://github.com/profanity-im/profanity.git
synced 2025-01-03 14:57:42 -05:00
Added window specific creation functions
This commit is contained in:
parent
3cef4e1db4
commit
070547a7ff
@ -931,11 +931,11 @@ _ui_next_win(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ui_gone_secure(const char * const recipient, gboolean trusted)
|
_ui_gone_secure(const char * const barejid, gboolean trusted)
|
||||||
{
|
{
|
||||||
ProfWin *window = wins_get_by_recipient(recipient);
|
ProfWin *window = wins_get_by_recipient(barejid);
|
||||||
if (window == NULL) {
|
if (window == NULL) {
|
||||||
window = wins_new(recipient, WIN_CHAT);
|
window = wins_new_chat(barejid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->type != WIN_CHAT) {
|
if (window->type != WIN_CHAT) {
|
||||||
@ -964,7 +964,7 @@ _ui_gone_secure(const char * const recipient, gboolean trusted)
|
|||||||
if (ui_index == 10) {
|
if (ui_index == 10) {
|
||||||
ui_index = 0;
|
ui_index = 0;
|
||||||
}
|
}
|
||||||
cons_show("%s started an OTR session (%d).", recipient, ui_index);
|
cons_show("%s started an OTR session (%d).", barejid, ui_index);
|
||||||
cons_alert();
|
cons_alert();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1380,9 +1380,9 @@ _ui_new_chat_win(const char * const to)
|
|||||||
Jid *jid = jid_create(to);
|
Jid *jid = jid_create(to);
|
||||||
|
|
||||||
if (muc_active(jid->barejid)) {
|
if (muc_active(jid->barejid)) {
|
||||||
window = wins_new(to, WIN_PRIVATE);
|
window = wins_new_private(to);
|
||||||
} else {
|
} else {
|
||||||
window = wins_new(to, WIN_CHAT);
|
window = wins_new_chat(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
jid_destroy(jid);
|
jid_destroy(jid);
|
||||||
@ -1409,7 +1409,7 @@ _ui_new_chat_win(const char * const to)
|
|||||||
static void
|
static void
|
||||||
_ui_create_xmlconsole_win(void)
|
_ui_create_xmlconsole_win(void)
|
||||||
{
|
{
|
||||||
ProfWin *window = wins_new("XML Console", WIN_XML);
|
ProfWin *window = wins_new_xmlconsole();
|
||||||
int num = wins_get_num(window);
|
int num = wins_get_num(window);
|
||||||
ui_switch_win(num);
|
ui_switch_win(num);
|
||||||
}
|
}
|
||||||
@ -1437,9 +1437,9 @@ _ui_outgoing_msg(const char * const from, const char * const to,
|
|||||||
Jid *jid = jid_create(to);
|
Jid *jid = jid_create(to);
|
||||||
|
|
||||||
if (muc_active(jid->barejid)) {
|
if (muc_active(jid->barejid)) {
|
||||||
window = wins_new(to, WIN_PRIVATE);
|
window = wins_new_private(to);
|
||||||
} else {
|
} else {
|
||||||
window = wins_new(to, WIN_CHAT);
|
window = wins_new_chat(to);
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef HAVE_LIBOTR
|
||||||
if (otr_is_secure(to)) {
|
if (otr_is_secure(to)) {
|
||||||
window->wins.chat.is_otr = TRUE;
|
window->wins.chat.is_otr = TRUE;
|
||||||
@ -1479,7 +1479,7 @@ _ui_room_join(const char * const room, gboolean focus)
|
|||||||
|
|
||||||
// create new window
|
// create new window
|
||||||
if (window == NULL) {
|
if (window == NULL) {
|
||||||
window = wins_new(room, WIN_MUC);
|
window = wins_new_muc(room);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *nick = muc_nick(room);
|
char *nick = muc_nick(room);
|
||||||
@ -2715,11 +2715,9 @@ _ui_handle_room_configuration(const char * const room, DataForm *form)
|
|||||||
{
|
{
|
||||||
GString *title = g_string_new(room);
|
GString *title = g_string_new(room);
|
||||||
g_string_append(title, " config");
|
g_string_append(title, " config");
|
||||||
ProfWin *window = wins_new(title->str, WIN_MUC_CONFIG);
|
ProfWin *window = wins_new_muc_config(title->str, form);
|
||||||
g_string_free(title, TRUE);
|
g_string_free(title, TRUE);
|
||||||
|
|
||||||
window->wins.conf.form = form;
|
|
||||||
|
|
||||||
int num = wins_get_num(window);
|
int num = wins_get_num(window);
|
||||||
ui_switch_win(num);
|
ui_switch_win(num);
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ gboolean (*ui_switch_win)(const int i);
|
|||||||
void (*ui_next_win)(void);
|
void (*ui_next_win)(void);
|
||||||
void (*ui_previous_win)(void);
|
void (*ui_previous_win)(void);
|
||||||
|
|
||||||
void (*ui_gone_secure)(const char * const recipient, gboolean trusted);
|
void (*ui_gone_secure)(const char * const barejid, gboolean trusted);
|
||||||
void (*ui_gone_insecure)(const char * const recipient);
|
void (*ui_gone_insecure)(const char * const recipient);
|
||||||
void (*ui_trust)(const char * const recipient);
|
void (*ui_trust)(const char * const recipient);
|
||||||
void (*ui_untrust)(const char * const recipient);
|
void (*ui_untrust)(const char * const recipient);
|
||||||
|
128
src/ui/window.c
128
src/ui/window.c
@ -51,6 +51,9 @@
|
|||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
|
|
||||||
|
#define CONS_WIN_TITLE "_cons"
|
||||||
|
#define XML_WIN_TITLE "XML Console"
|
||||||
|
|
||||||
#define CEILING(X) (X-(int)(X) > 0 ? (int)(X+1) : (int)(X))
|
#define CEILING(X) (X-(int)(X) > 0 ? (int)(X+1) : (int)(X))
|
||||||
|
|
||||||
static void _win_print(ProfWin *window, const char show_char, GDateTime *time,
|
static void _win_print(ProfWin *window, const char show_char, GDateTime *time,
|
||||||
@ -73,6 +76,30 @@ win_occpuants_cols(void)
|
|||||||
return CEILING( (((double)cols) / 100) * occupants_win_percent);
|
return CEILING( (((double)cols) / 100) * occupants_win_percent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfWin*
|
||||||
|
win_create_console(void)
|
||||||
|
{
|
||||||
|
ProfWin *new_win = malloc(sizeof(ProfWin));
|
||||||
|
int cols = getmaxx(stdscr);
|
||||||
|
|
||||||
|
new_win->type = WIN_CONSOLE;
|
||||||
|
|
||||||
|
new_win->win = newpad(PAD_SIZE, (cols));
|
||||||
|
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
||||||
|
new_win->wins.cons.subwin = NULL;
|
||||||
|
new_win->wins.cons.sub_y_pos = 0;
|
||||||
|
|
||||||
|
new_win->from = strdup(CONS_WIN_TITLE);
|
||||||
|
new_win->buffer = buffer_create();
|
||||||
|
new_win->y_pos = 0;
|
||||||
|
new_win->paged = 0;
|
||||||
|
new_win->unread = 0;
|
||||||
|
|
||||||
|
scrollok(new_win->win, TRUE);
|
||||||
|
|
||||||
|
return new_win;
|
||||||
|
}
|
||||||
|
|
||||||
ProfWin*
|
ProfWin*
|
||||||
win_create_chat(const char * const barejid)
|
win_create_chat(const char * const barejid)
|
||||||
{
|
{
|
||||||
@ -100,6 +127,62 @@ win_create_chat(const char * const barejid)
|
|||||||
return new_win;
|
return new_win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfWin*
|
||||||
|
win_create_muc(const char * const roomjid)
|
||||||
|
{
|
||||||
|
ProfWin *new_win = malloc(sizeof(ProfWin));
|
||||||
|
int cols = getmaxx(stdscr);
|
||||||
|
|
||||||
|
new_win->type = WIN_MUC;
|
||||||
|
|
||||||
|
if (prefs_get_boolean(PREF_OCCUPANTS)) {
|
||||||
|
int subwin_cols = win_occpuants_cols();
|
||||||
|
new_win->win = newpad(PAD_SIZE, cols - subwin_cols);
|
||||||
|
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
||||||
|
new_win->wins.muc.subwin = newpad(PAD_SIZE, subwin_cols);;
|
||||||
|
wbkgd(new_win->wins.muc.subwin, theme_attrs(THEME_TEXT));
|
||||||
|
} else {
|
||||||
|
new_win->win = newpad(PAD_SIZE, (cols));
|
||||||
|
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
||||||
|
new_win->wins.muc.subwin = NULL;
|
||||||
|
}
|
||||||
|
new_win->wins.muc.sub_y_pos = 0;
|
||||||
|
|
||||||
|
new_win->from = strdup(roomjid);
|
||||||
|
new_win->buffer = buffer_create();
|
||||||
|
new_win->y_pos = 0;
|
||||||
|
new_win->paged = 0;
|
||||||
|
new_win->unread = 0;
|
||||||
|
|
||||||
|
scrollok(new_win->win, TRUE);
|
||||||
|
|
||||||
|
return new_win;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfWin*
|
||||||
|
win_create_muc_config(const char * const title, DataForm *form)
|
||||||
|
{
|
||||||
|
ProfWin *new_win = malloc(sizeof(ProfWin));
|
||||||
|
int cols = getmaxx(stdscr);
|
||||||
|
|
||||||
|
new_win->type = WIN_MUC_CONFIG;
|
||||||
|
|
||||||
|
new_win->win = newpad(PAD_SIZE, (cols));
|
||||||
|
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
||||||
|
|
||||||
|
new_win->wins.conf.form = form;
|
||||||
|
|
||||||
|
new_win->from = strdup(title);
|
||||||
|
new_win->buffer = buffer_create();
|
||||||
|
new_win->y_pos = 0;
|
||||||
|
new_win->paged = 0;
|
||||||
|
new_win->unread = 0;
|
||||||
|
|
||||||
|
scrollok(new_win->win, TRUE);
|
||||||
|
|
||||||
|
return new_win;
|
||||||
|
}
|
||||||
|
|
||||||
ProfWin*
|
ProfWin*
|
||||||
win_create_private(const char * const fulljid)
|
win_create_private(const char * const fulljid)
|
||||||
{
|
{
|
||||||
@ -124,57 +207,22 @@ win_create_private(const char * const fulljid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProfWin*
|
ProfWin*
|
||||||
win_create(const char * const title, win_type_t type)
|
win_create_xmlconsole(void)
|
||||||
{
|
{
|
||||||
ProfWin *new_win = malloc(sizeof(ProfWin));
|
ProfWin *new_win = malloc(sizeof(ProfWin));
|
||||||
int cols = getmaxx(stdscr);
|
int cols = getmaxx(stdscr);
|
||||||
|
|
||||||
new_win->type = type;
|
new_win->type = WIN_XML;
|
||||||
|
|
||||||
switch (new_win->type) {
|
new_win->win = newpad(PAD_SIZE, (cols));
|
||||||
case WIN_CONSOLE:
|
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
||||||
new_win->win = newpad(PAD_SIZE, (cols));
|
|
||||||
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
|
||||||
new_win->wins.cons.subwin = NULL;
|
|
||||||
new_win->wins.cons.sub_y_pos = 0;
|
|
||||||
break;
|
|
||||||
case WIN_MUC:
|
|
||||||
if (prefs_get_boolean(PREF_OCCUPANTS)) {
|
|
||||||
int subwin_cols = win_occpuants_cols();
|
|
||||||
new_win->win = newpad(PAD_SIZE, cols - subwin_cols);
|
|
||||||
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
|
||||||
new_win->wins.muc.subwin = newpad(PAD_SIZE, subwin_cols);;
|
|
||||||
wbkgd(new_win->wins.muc.subwin, theme_attrs(THEME_TEXT));
|
|
||||||
} else {
|
|
||||||
new_win->win = newpad(PAD_SIZE, (cols));
|
|
||||||
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
|
||||||
new_win->wins.muc.subwin = NULL;
|
|
||||||
}
|
|
||||||
new_win->wins.muc.sub_y_pos = 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
new_win->win = newpad(PAD_SIZE, (cols));
|
|
||||||
wbkgd(new_win->win, theme_attrs(THEME_TEXT));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (new_win->type == WIN_MUC_CONFIG) {
|
new_win->from = strdup(XML_WIN_TITLE);
|
||||||
new_win->wins.conf.form = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_win->from = strdup(title);
|
|
||||||
new_win->buffer = buffer_create();
|
new_win->buffer = buffer_create();
|
||||||
new_win->y_pos = 0;
|
new_win->y_pos = 0;
|
||||||
new_win->paged = 0;
|
new_win->paged = 0;
|
||||||
new_win->unread = 0;
|
new_win->unread = 0;
|
||||||
|
|
||||||
if (new_win->type == WIN_CHAT) {
|
|
||||||
new_win->wins.chat.resource = NULL;
|
|
||||||
new_win->wins.chat.is_otr = FALSE;
|
|
||||||
new_win->wins.chat.is_trusted = FALSE;
|
|
||||||
new_win->wins.chat.history_shown = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
scrollok(new_win->win, TRUE);
|
scrollok(new_win->win, TRUE);
|
||||||
|
|
||||||
return new_win;
|
return new_win;
|
||||||
|
@ -110,9 +110,12 @@ typedef struct prof_win_t {
|
|||||||
} wins;
|
} wins;
|
||||||
} ProfWin;
|
} ProfWin;
|
||||||
|
|
||||||
ProfWin* win_create(const char * const title, win_type_t type);
|
ProfWin* win_create_console(void);
|
||||||
ProfWin* win_create_chat(const char * const barejid);
|
ProfWin* win_create_chat(const char * const barejid);
|
||||||
|
ProfWin* win_create_muc(const char * const roomjid);
|
||||||
|
ProfWin* win_create_muc_config(const char * const title, DataForm *form);
|
||||||
ProfWin* win_create_private(const char * const fulljid);
|
ProfWin* win_create_private(const char * const fulljid);
|
||||||
|
ProfWin* win_create_xmlconsole(void);
|
||||||
|
|
||||||
void win_free(ProfWin *window);
|
void win_free(ProfWin *window);
|
||||||
void win_update_virtual(ProfWin *window);
|
void win_update_virtual(ProfWin *window);
|
||||||
|
@ -52,8 +52,6 @@
|
|||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/windows.h"
|
#include "ui/windows.h"
|
||||||
|
|
||||||
#define CONS_WIN_TITLE "_cons"
|
|
||||||
|
|
||||||
static GHashTable *windows;
|
static GHashTable *windows;
|
||||||
static int current;
|
static int current;
|
||||||
static int max_cols;
|
static int max_cols;
|
||||||
@ -65,7 +63,7 @@ wins_init(void)
|
|||||||
(GDestroyNotify)win_free);
|
(GDestroyNotify)win_free);
|
||||||
|
|
||||||
max_cols = getmaxx(stdscr);
|
max_cols = getmaxx(stdscr);
|
||||||
ProfWin *console = win_create(CONS_WIN_TITLE, WIN_CONSOLE);
|
ProfWin *console = win_create_console();
|
||||||
g_hash_table_insert(windows, GINT_TO_POINTER(1), console);
|
g_hash_table_insert(windows, GINT_TO_POINTER(1), console);
|
||||||
|
|
||||||
current = 1;
|
current = 1;
|
||||||
@ -256,11 +254,11 @@ wins_is_current(ProfWin *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProfWin *
|
ProfWin *
|
||||||
wins_new(const char * const from, win_type_t type)
|
wins_new_xmlconsole(void)
|
||||||
{
|
{
|
||||||
GList *keys = g_hash_table_get_keys(windows);
|
GList *keys = g_hash_table_get_keys(windows);
|
||||||
int result = get_next_available_win_num(keys);
|
int result = get_next_available_win_num(keys);
|
||||||
ProfWin *new = win_create(from, type);
|
ProfWin *new = win_create_xmlconsole();
|
||||||
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
|
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
|
||||||
g_list_free(keys);
|
g_list_free(keys);
|
||||||
return new;
|
return new;
|
||||||
@ -277,6 +275,28 @@ wins_new_chat(const char * const barejid)
|
|||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfWin *
|
||||||
|
wins_new_muc(const char * const roomjid)
|
||||||
|
{
|
||||||
|
GList *keys = g_hash_table_get_keys(windows);
|
||||||
|
int result = get_next_available_win_num(keys);
|
||||||
|
ProfWin *new = win_create_muc(roomjid);
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
|
||||||
|
g_list_free(keys);
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfWin *
|
||||||
|
wins_new_muc_config(const char * const title, DataForm *form)
|
||||||
|
{
|
||||||
|
GList *keys = g_hash_table_get_keys(windows);
|
||||||
|
int result = get_next_available_win_num(keys);
|
||||||
|
ProfWin *new = win_create_muc_config(title, form);
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
|
||||||
|
g_list_free(keys);
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
ProfWin *
|
ProfWin *
|
||||||
wins_new_private(const char * const fulljid)
|
wins_new_private(const char * const fulljid)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,13 @@
|
|||||||
#define UI_WINDOWS_H
|
#define UI_WINDOWS_H
|
||||||
|
|
||||||
void wins_init(void);
|
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_private(const char * const fulljid);
|
||||||
|
|
||||||
ProfWin * wins_get_console(void);
|
ProfWin * wins_get_console(void);
|
||||||
ProfWin * wins_get_current(void);
|
ProfWin * wins_get_current(void);
|
||||||
void wins_set_current_by_num(int i);
|
void wins_set_current_by_num(int i);
|
||||||
@ -49,9 +56,6 @@ void wins_close_current(void);
|
|||||||
void wins_close_by_num(int i);
|
void wins_close_by_num(int i);
|
||||||
void wins_clear_current(void);
|
void wins_clear_current(void);
|
||||||
gboolean wins_is_current(ProfWin *window);
|
gboolean wins_is_current(ProfWin *window);
|
||||||
ProfWin * wins_new(const char * const from, win_type_t type);
|
|
||||||
ProfWin * wins_new_chat(const char * const barejid);
|
|
||||||
ProfWin * wins_new_private(const char * const fulljid);
|
|
||||||
int wins_get_total_unread(void);
|
int wins_get_total_unread(void);
|
||||||
void wins_resize_all(void);
|
void wins_resize_all(void);
|
||||||
GSList * wins_get_chat_recipients(void);
|
GSList * wins_get_chat_recipients(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user