예제 #1
0
static gboolean
close_drawer_in_idle (gpointer data)
{
	Drawer *drawer = (Drawer *) data;

	drawer->close_timeout_id = 0;

	if (drawer->opened_for_drag) {
		panel_toplevel_hide (drawer->toplevel, FALSE, -1);
		drawer->opened_for_drag = FALSE;
	}

	return FALSE;
}
예제 #2
0
파일: drawer.c 프로젝트: yetist/mate-panel
/*
 * This function implements Esc moving focus from the drawer to the drawer
 * icon and closing the drawer and Shift+Esc moving focus from the drawer
 * to the drawer icon without closing the drawer when focus is in the drawer.
 */
static gboolean
key_press_drawer_widget (GtkWidget   *widget,
                         GdkEventKey *event,
                         Drawer      *drawer)
{
    PanelWidget *panel_widget;

    if (event->keyval != GDK_KEY_Escape)
        return FALSE;

    panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);

    gtk_window_present (GTK_WINDOW (panel_widget->toplevel));

    if ((event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_SHIFT_MASK ||
        panel_toplevel_get_is_hidden (drawer->toplevel))
            return TRUE;

    panel_toplevel_hide (drawer->toplevel, FALSE, -1);

    return TRUE;
}
예제 #3
0
static void
panel_action_button_clicked (GtkButton *gtk_button)
{
	PanelActionButton *button;

	g_return_if_fail (PANEL_IS_ACTION_BUTTON (gtk_button));

	button = PANEL_ACTION_BUTTON (gtk_button);

	g_return_if_fail (button->priv->type > PANEL_ACTION_NONE);
	g_return_if_fail (button->priv->type < PANEL_ACTION_LAST);

	if (panel_global_config_get_drawer_auto_close ()) {
		PanelToplevel *toplevel;

		toplevel = PANEL_WIDGET (gtk_widget_get_parent (GTK_WIDGET (button)))->toplevel;

		if (panel_toplevel_get_is_attached (toplevel))
			panel_toplevel_hide (toplevel, FALSE, -1);
	}

	if (actions [button->priv->type].invoke)
		actions [button->priv->type].invoke (GTK_WIDGET (button));
}
예제 #4
0
파일: drawer.c 프로젝트: yetist/mate-panel
static gboolean
key_press_drawer (GtkWidget   *widget,
                  GdkEventKey *event,
                  Drawer      *drawer)
{
    gboolean retval = TRUE;
    GtkOrientation orient;

    if (event->state & gtk_accelerator_get_default_mod_mask ())
        return FALSE;

    orient = PANEL_WIDGET (gtk_widget_get_parent (drawer->button))->orient;

    switch (event->keyval) {
    case GDK_KEY_Up:
    case GDK_KEY_KP_Up:
        if (orient == GTK_ORIENTATION_HORIZONTAL) {
            if (!panel_toplevel_get_is_hidden (drawer->toplevel))
                drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD);
        } else {
            /* let default focus movement happen */
            retval = FALSE;
        }
        break;
    case GDK_KEY_Left:
    case GDK_KEY_KP_Left:
        if (orient == GTK_ORIENTATION_VERTICAL) {
            if (!panel_toplevel_get_is_hidden (drawer->toplevel))
                drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD);
        } else {
            /* let default focus movement happen */
            retval = FALSE;
        }
        break;
    case GDK_KEY_Down:
    case GDK_KEY_KP_Down:
        if (orient == GTK_ORIENTATION_HORIZONTAL) {
            if (!panel_toplevel_get_is_hidden (drawer->toplevel))
                drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD);
        } else {
            /* let default focus movement happen */
            retval = FALSE;
        }
        break;
    case GDK_KEY_Right:
    case GDK_KEY_KP_Right:
        if (orient == GTK_ORIENTATION_VERTICAL) {
            if (!panel_toplevel_get_is_hidden (drawer->toplevel))
                drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD);
        } else {
            /* let default focus movement happen */
            retval = FALSE;
        }
        break;
    case GDK_KEY_Escape:
        panel_toplevel_hide (drawer->toplevel, FALSE, -1);
        break;
    default:
        retval = FALSE;
        break;
    }

    return retval;
}
예제 #5
0
파일: drawer.c 프로젝트: yetist/mate-panel
static void
load_drawer_applet (char          *toplevel_id,
                    GSettings     *settings,
                    const char    *custom_icon,
                    gboolean       use_custom_icon,
                    const char    *tooltip,
                    PanelToplevel *parent_toplevel,
                    gboolean       locked,
                    int            pos,
                    gboolean       exactpos,
                    const char    *id)
{
    PanelOrientation  orientation;
    PanelToplevel    *toplevel = NULL;
    Drawer           *drawer = NULL;
    PanelWidget      *panel_widget;

    orientation = panel_toplevel_get_orientation (parent_toplevel);

    if (toplevel_id)
        toplevel = panel_profile_get_toplevel_by_id (toplevel_id);

    if (!toplevel)
        toplevel = create_drawer_toplevel (id, settings);

    if (toplevel) {
        panel_toplevel_hide (toplevel, FALSE, -1);
        drawer = create_drawer_applet (toplevel,
                                       parent_toplevel,
                                       tooltip,
                                       custom_icon,
                                       use_custom_icon,
                                       orientation);
    }

    if (!drawer)
        return;

    panel_widget = panel_toplevel_get_panel_widget (parent_toplevel);

    drawer->info = mate_panel_applet_register (drawer->button, drawer,
                                          (GDestroyNotify) g_free,
                                          panel_widget,
                                          locked, pos, exactpos,
                                          PANEL_OBJECT_DRAWER, id);

    if (!drawer->info) {
        gtk_widget_destroy (GTK_WIDGET (toplevel));
        return;
    }

    g_signal_connect_after (drawer->button, "size_allocate", G_CALLBACK (drawer_button_size_allocated), drawer);

    panel_widget_add_forbidden (panel_toplevel_get_panel_widget (drawer->toplevel));
    panel_widget_set_applet_expandable (panel_widget, GTK_WIDGET (drawer->button), FALSE, TRUE);
    panel_widget_set_applet_size_constrained (panel_widget, GTK_WIDGET (drawer->button), TRUE);

    mate_panel_applet_add_callback (drawer->info,
                               "add",
                               "list-add",
                               _("_Add to Drawer..."),
                               drawer_changes_enabled);

    mate_panel_applet_add_callback (drawer->info,
                               "properties",
                               "document-properties",
                               _("_Properties"),
                               drawer_changes_enabled);

    mate_panel_applet_add_callback (drawer->info,
                               "help",
                               "help-browser",
                               _("_Help"),
                               NULL);

    panel_drawer_connect_to_gsettings (drawer);
}