static void gui_window_destroyed(WINDOW_REC *window) { MAIN_WINDOW_REC *parent; GUI_WINDOW_REC *gui; g_return_if_fail(window != NULL); gui = WINDOW_GUI(window); parent = gui->parent; gui_window_set_unsticky(window); signal_emit("gui window destroyed", 1, window); gui_window_deinit(gui); window->gui_data = NULL; if (parent->active == window) mainwindow_change_active(parent, window); }
static void window_reparent(WINDOW_REC *win, MAIN_WINDOW_REC *mainwin) { MAIN_WINDOW_REC *old_mainwin; old_mainwin = WINDOW_MAIN(win); if (old_mainwin != mainwin) { gui_window_set_unsticky(win); if (old_mainwin->active == win) { mainwindow_change_active(old_mainwin, win); if (active_mainwin == NULL) { active_mainwin = mainwin; window_set_active(mainwin->active); } } gui_window_reparent(win, mainwin); window_set_active(win); } }
/* SYNTAX: WINDOW STICK [<ref#>] [ON|OFF] */ static void cmd_window_stick(const char *data) { MAIN_WINDOW_REC *mainwin; WINDOW_REC *win; mainwin = active_mainwin; win = active_mainwin->active; if (is_numeric(data, ' ')) { /* ref# specified */ win = window_find_refnum(atoi(data)); if (win == NULL) { printformat_window(active_win, MSGLEVEL_CLIENTERROR, TXT_REFNUM_NOT_FOUND, data); return; } while (*data != ' ' && *data != '\0') data++; while (*data == ' ') data++; } if (g_strncasecmp(data, "OF", 2) == 0 || i_toupper(*data) == 'N') { /* unset sticky */ if (!WINDOW_GUI(win)->sticky) { printformat_window(win, MSGLEVEL_CLIENTERROR, TXT_WINDOW_NOT_STICKY); } else { gui_window_set_unsticky(win); printformat_window(win, MSGLEVEL_CLIENTNOTICE, TXT_WINDOW_UNSET_STICKY); } } else { /* set sticky */ window_reparent(win, mainwin); gui_window_set_sticky(win); printformat_window(active_win, MSGLEVEL_CLIENTNOTICE, TXT_WINDOW_SET_STICKY); } }
void gui_window_reparent(WINDOW_REC *window, MAIN_WINDOW_REC *parent) { MAIN_WINDOW_REC *oldparent; oldparent = WINDOW_MAIN(window); if (oldparent == parent) return; gui_window_set_unsticky(window); textbuffer_view_set_window(WINDOW_GUI(window)->view, NULL); WINDOW_MAIN(window) = parent; if (parent->sticky_windows) gui_window_set_sticky(window); if (MAIN_WINDOW_TEXT_HEIGHT(parent) != MAIN_WINDOW_TEXT_HEIGHT(oldparent) || parent->width != oldparent->width) { gui_window_resize(window, parent->width, MAIN_WINDOW_TEXT_HEIGHT(parent)); } }