static gint window_iconify(GtkWidget *w, GdkEventWindowState *event, gpointer context) { int i; if ((!ss) || (!(ss->dialogs))) return(false); if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) { /* presumably we are now iconified */ if (iconify_active_dialogs) free(iconify_active_dialogs); iconify_active_dialogs = (GtkWidget **)calloc(ss->num_dialogs, sizeof(GtkWidget *)); for (i = 0; i < ss->num_dialogs; i++) if (ss->dialogs[i]) { if (widget_is_active(ss->dialogs[i])) iconify_active_dialogs[i] = ss->dialogs[i]; gtk_widget_hide(ss->dialogs[i]); } } else { if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) { /* this is confusing -- can I assume I've been deiconified or not? if not, how to tell? */ if (iconify_active_dialogs) { for (i = 0; i < ss->num_dialogs; i++) if (iconify_active_dialogs[i]) gtk_widget_show(iconify_active_dialogs[i]); free(iconify_active_dialogs); iconify_active_dialogs = NULL; } } } return(false); }
static cb_ret_t panel_listing_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WDialog *h = DIALOG (w); switch (msg) { case MSG_KEY: if (parm == '\n') { Widget *wi; wi = dlg_find_by_id (h, panel_listing_types_id); if (widget_is_active (wi)) { WInput *in; in = INPUT (dlg_find_by_id (h, mini_user_format_id)); input_assign_text (in, status_format[RADIO (wi)->sel]); dlg_stop (h); return MSG_HANDLED; } wi = dlg_find_by_id (h, panel_user_format_id); if (widget_is_active (wi)) { h->ret_value = B_USER + 6; dlg_stop (h); return MSG_HANDLED; } wi = dlg_find_by_id (h, mini_user_format_id); if (widget_is_active (wi)) { h->ret_value = B_USER + 7; dlg_stop (h); return MSG_HANDLED; } } if (g_ascii_tolower (parm) == listing_user_hotkey) { Widget *wi; wi = dlg_find_by_id (h, panel_user_format_id); if (widget_is_active (wi)) { wi = dlg_find_by_id (h, mini_user_format_id); if (widget_is_active (wi)) { WRadio *r; r = RADIO (dlg_find_by_id (h, panel_listing_types_id)); r->pos = r->sel = panel_listing_user_idx; dlg_select_widget (WIDGET (r)); /* force redraw */ send_message (h, r, MSG_ACTION, 0, NULL); return MSG_HANDLED; } } } return MSG_NOT_HANDLED; case MSG_ACTION: if (sender != NULL && sender->id == panel_listing_types_id) { WCheck *ch; WInput *in1, *in2, *in3; in1 = INPUT (dlg_find_by_id (h, panel_user_format_id)); in2 = INPUT (dlg_find_by_id (h, panel_brief_cols_id)); ch = CHECK (dlg_find_by_id (h, mini_user_status_id)); in3 = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (!(ch->state & C_BOOL)) input_assign_text (in3, status_format[RADIO (sender)->sel]); input_update (in1, FALSE); input_update (in2, FALSE); input_update (in3, FALSE); widget_disable (WIDGET (in1), RADIO (sender)->sel != panel_listing_user_idx); widget_disable (WIDGET (in2), RADIO (sender)->sel != panel_listing_brief_idx); return MSG_HANDLED; } if (sender != NULL && sender->id == mini_user_status_id) { WInput *in; in = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (CHECK (sender)->state & C_BOOL) { widget_disable (WIDGET (in), FALSE); input_assign_text (in, status_format[3]); } else { WRadio *r; r = RADIO (dlg_find_by_id (h, panel_listing_types_id)); widget_disable (WIDGET (in), TRUE); input_assign_text (in, status_format[r->sel]); } /* input_update (in, FALSE); */ return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
void swap_panels (void) { WPanel *panel1, *panel2; Widget *tmp_widget; panel1 = PANEL (panels[0].widget); panel2 = PANEL (panels[1].widget); if (panels[0].type == view_listing && panels[1].type == view_listing && !mc_config_get_bool (mc_main_config, CONFIG_PANELS_SECTION, "simple_swap", FALSE)) { WPanel panel; #define panelswap(x) panel.x = panel1->x; panel1->x = panel2->x; panel2->x = panel.x; #define panelswapstr(e) strcpy (panel.e, panel1->e); \ strcpy (panel1->e, panel2->e); \ strcpy (panel2->e, panel.e); /* Change content and related stuff */ panelswap (dir); panelswap (active); panelswap (cwd_vpath); panelswap (lwd_vpath); panelswap (marked); panelswap (dirs_marked); panelswap (total); panelswap (top_file); panelswap (selected); panelswap (is_panelized); panelswap (dir_stat); #undef panelswapstr #undef panelswap panel1->searching = FALSE; panel2->searching = FALSE; if (current_panel == panel1) current_panel = panel2; else current_panel = panel1; /* if sort options are different -> resort panels */ if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (dir_sort_options_t)) != 0) { panel_re_sort (other_panel); panel_re_sort (current_panel); } if (widget_is_active (panels[0].widget)) dlg_select_widget (panels[1].widget); else if (widget_is_active (panels[1].widget)) dlg_select_widget (panels[0].widget); } else { WPanel *tmp_panel; int x, y, cols, lines; int tmp_type; tmp_panel = right_panel; right_panel = left_panel; left_panel = tmp_panel; if (panels[0].type == view_listing) { if (strcmp (panel1->panel_name, get_nth_panel_name (0)) == 0) { g_free (panel1->panel_name); panel1->panel_name = g_strdup (get_nth_panel_name (1)); } } if (panels[1].type == view_listing) { if (strcmp (panel2->panel_name, get_nth_panel_name (1)) == 0) { g_free (panel2->panel_name); panel2->panel_name = g_strdup (get_nth_panel_name (0)); } } x = panels[0].widget->x; y = panels[0].widget->y; cols = panels[0].widget->cols; lines = panels[0].widget->lines; panels[0].widget->x = panels[1].widget->x; panels[0].widget->y = panels[1].widget->y; panels[0].widget->cols = panels[1].widget->cols; panels[0].widget->lines = panels[1].widget->lines; panels[1].widget->x = x; panels[1].widget->y = y; panels[1].widget->cols = cols; panels[1].widget->lines = lines; tmp_widget = panels[0].widget; panels[0].widget = panels[1].widget; panels[1].widget = tmp_widget; tmp_type = panels[0].type; panels[0].type = panels[1].type; panels[1].type = tmp_type; /* force update formats because of possible changed sizes */ if (panels[0].type == view_listing) set_panel_formats (PANEL (panels[0].widget)); if (panels[1].type == view_listing) set_panel_formats (PANEL (panels[1].widget)); } }