static void setup_button (Launcher *launcher) { char *comment; char *name; char *str; char *icon; char *unescaped_str; g_return_if_fail (launcher != NULL); name = panel_key_file_get_locale_string (launcher->key_file, "Name"); comment = panel_key_file_get_locale_string (launcher->key_file, "Comment"); /* Setup tooltip */ if (!PANEL_GLIB_STR_EMPTY (name) && !PANEL_GLIB_STR_EMPTY (comment)) str = g_strdup_printf ("%s\n%s", name, comment); else if (!PANEL_GLIB_STR_EMPTY (name)) str = g_strdup (name); else str = g_strdup (comment); g_free (name); g_free (comment); /* If we can unescape the string, then we probably have an escaped * string (a location e.g.). If we can't, then it most probably means * we have a % that is not here to encode a character, and we don't * want to unescape in this case. See bug #170516 for details. */ unescaped_str = g_uri_unescape_string (str, NULL); if (unescaped_str) { g_free (str); str = unescaped_str; } panel_util_set_tooltip_text (launcher->button, str); /* Setup accessible name */ panel_a11y_set_atk_name_desc (launcher->button, str, NULL); g_free (str); /* Setup icon */ icon = panel_key_file_get_locale_string (launcher->key_file, "Icon"); if (icon && icon[0] == '\0') { g_free (icon); icon = NULL; } if (!icon) icon = guess_icon_from_exec (button_widget_get_icon_theme (BUTTON_WIDGET (launcher->button)), launcher->key_file); if (!icon) icon = g_strdup (PANEL_ICON_LAUNCHER); button_widget_set_icon_name (BUTTON_WIDGET (launcher->button), icon); g_free (icon); }
static gboolean drag_motion_cb (GtkWidget *widget, GdkDragContext *context, int x, int y, guint time_, Drawer *drawer) { PanelWidget *panel_widget; guint info = 0; if (!panel_check_dnd_target_data (widget, context, &info, NULL)) return FALSE; panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel); if (!panel_check_drop_forbidden (panel_widget, context, info, time_)) return FALSE; if (drawer->close_timeout_id) g_source_remove (drawer->close_timeout_id); drawer->close_timeout_id = 0; button_widget_set_dnd_highlight (BUTTON_WIDGET (widget), TRUE); if (panel_toplevel_get_is_hidden (drawer->toplevel)) { panel_toplevel_unhide (drawer->toplevel); drawer->opened_for_drag = TRUE; } return TRUE; }
static void panel_drawer_use_custom_icon_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, Drawer *drawer) { gboolean use_custom_icon; char *custom_icon = NULL; if (!entry->value || entry->value->type != GCONF_VALUE_BOOL) return; use_custom_icon = gconf_value_get_bool (entry->value); if (use_custom_icon) { const char *key; key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, drawer->info->id, "custom_icon"); custom_icon = gconf_client_get_string (client, key, NULL); } button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), custom_icon); g_free (custom_icon); }
void panel_menu_button_popup_menu (PanelMenuButton *button, guint n_button, guint32 activate_time) { GdkScreen *screen; g_return_if_fail (PANEL_IS_MENU_BUTTON (button)); panel_menu_button_create_menu (button); panel_toplevel_push_autohide_disabler (button->priv->toplevel); button_widget_set_ignore_leave (BUTTON_WIDGET (button), TRUE); screen = gtk_window_get_screen (GTK_WINDOW (button->priv->toplevel)); gtk_menu_set_screen (GTK_MENU (button->priv->menu), screen); gtk_menu_popup (GTK_MENU (button->priv->menu), NULL, NULL, (GtkMenuPositionFunc) mate_panel_applet_position_menu, GTK_WIDGET (button), n_button, activate_time); }
void orientation_change (AppletInfo *info, PanelWidget *panel) { PanelOrientation orientation; orientation = panel_widget_get_applet_orientation (panel); switch (info->type) { case PANEL_OBJECT_APPLET: panel_applet_frame_change_orientation ( PANEL_APPLET_FRAME (info->widget), orientation); break; case PANEL_OBJECT_MENU: case PANEL_OBJECT_LAUNCHER: case PANEL_OBJECT_ACTION: button_widget_set_orientation (BUTTON_WIDGET (info->widget), orientation); break; case PANEL_OBJECT_MENU_BAR: case PANEL_OBJECT_USER_MENU: panel_menu_bar_object_set_orientation (PANEL_MENU_BAR_OBJECT (info->widget), orientation); break; case PANEL_OBJECT_SEPARATOR: panel_separator_set_orientation (PANEL_SEPARATOR (info->widget), orientation); break; default: break; } }
void panel_launcher_set_dnd_enabled (Launcher *launcher, gboolean dnd_enabled) { GdkPixbuf *pixbuf; if (dnd_enabled) { static GtkTargetEntry dnd_targets[] = { { (gchar *) "application/x-panel-icon-internal", 0, TARGET_ICON_INTERNAL }, { (gchar *) "text/uri-list", 0, TARGET_URI_LIST } }; gtk_widget_set_has_window (launcher->button, TRUE); gtk_drag_source_set (launcher->button, GDK_BUTTON1_MASK, dnd_targets, 2, GDK_ACTION_COPY | GDK_ACTION_MOVE); //FIXME: this doesn't work since the pixbuf isn't loaded yet pixbuf = button_widget_get_pixbuf (BUTTON_WIDGET (launcher->button)); if (pixbuf) { gtk_drag_source_set_icon_pixbuf (launcher->button, pixbuf); g_object_unref (pixbuf); } gtk_widget_set_has_window (launcher->button, FALSE); } else gtk_drag_source_unset (launcher->button); }
static void panel_action_button_update_sensitivity (PanelActionButton *button) { if (actions [button->priv->type].is_disabled) button_widget_set_activatable (BUTTON_WIDGET (button), !actions [button->priv->type].is_disabled ()); }
static void panel_menu_button_menu_deactivated (PanelMenuButton *button) { panel_toplevel_pop_autohide_disabler (button->priv->toplevel); GTK_BUTTON (button)->in_button = FALSE; button_widget_set_ignore_leave (BUTTON_WIDGET (button), FALSE); }
static void drag_leave_cb(GtkWidget *widget, GdkDragContext *context, guint time, Launcher *launcher) { button_widget_set_dnd_highlight(BUTTON_WIDGET(widget), FALSE); }
static void panel_menu_button_menu_deactivated (PanelMenuButton *button) { panel_toplevel_pop_autohide_disabler (button->priv->toplevel); gtk_widget_unset_state_flags (GTK_WIDGET (button), GTK_STATE_FLAG_PRELIGHT); button_widget_set_ignore_leave (BUTTON_WIDGET (button), FALSE); }
static void panel_menu_button_menu_deactivated (PanelMenuButton *button) { panel_toplevel_pop_autohide_disabler (button->priv->toplevel); GTK_BUTTON (button)->in_button = FALSE; BUTTON_WIDGET (button)->ignore_leave = FALSE; gtk_button_released (GTK_BUTTON (button)); }
static void drag_leave_cb (GtkWidget *widget, GdkDragContext *context, guint time_, Drawer *drawer) { queue_drawer_close_for_drag (drawer); button_widget_set_dnd_highlight (BUTTON_WIDGET (widget), FALSE); }
static void panel_action_button_update_sensitivity (PanelLockdown *lockdown, gpointer user_data) { PanelActionButton *button = user_data; if (actions [button->priv->type].is_disabled) button_widget_set_activatable (BUTTON_WIDGET (button), !actions [button->priv->type].is_disabled ()); }
static void panel_drawer_custom_icon_changed (GSettings *settings, gchar *key, Drawer *drawer) { g_return_if_fail (drawer != NULL); g_return_if_fail (drawer->button != NULL); gboolean use_custom_icon = g_settings_get_boolean (settings, PANEL_OBJECT_USE_CUSTOM_ICON_KEY); char *custom_icon = g_settings_get_string (settings, PANEL_OBJECT_CUSTOM_ICON_KEY); if (use_custom_icon && custom_icon != NULL && custom_icon [0] != '\0') { button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), custom_icon); } else { button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), PANEL_ICON_DRAWER); } g_free (custom_icon); }
void orientation_change (AppletInfo *info, PanelWidget *panel) { PanelOrientation orientation; orientation = panel_widget_get_applet_orientation (panel); switch (info->type) { case PANEL_OBJECT_APPLET: mate_panel_applet_frame_change_orientation ( MATE_PANEL_APPLET_FRAME (info->widget), orientation); break; case PANEL_OBJECT_MENU: case PANEL_OBJECT_LAUNCHER: case PANEL_OBJECT_ACTION: button_widget_set_orientation (BUTTON_WIDGET (info->widget), orientation); break; case PANEL_OBJECT_MENU_BAR: panel_menu_bar_set_orientation (PANEL_MENU_BAR (info->widget), orientation); break; case PANEL_OBJECT_DRAWER: { Drawer *drawer = info->data; PanelWidget *panel_widget; panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel); button_widget_set_orientation (BUTTON_WIDGET (info->widget), orientation); gtk_widget_queue_resize (GTK_WIDGET (drawer->toplevel)); gtk_container_foreach (GTK_CONTAINER (panel_widget), orient_change_foreach, panel_widget); } break; case PANEL_OBJECT_SEPARATOR: panel_separator_set_orientation (PANEL_SEPARATOR (info->widget), orientation); break; default: break; } }
static void panel_menu_button_set_icon (PanelMenuButton *button) { char *icon_path; icon_path = panel_menu_button_get_icon (button); button_widget_set_icon_name (BUTTON_WIDGET (button), icon_path); g_free (icon_path); }
void panel_menu_button_set_has_arrow (PanelMenuButton *button, gboolean has_arrow) { g_return_if_fail (PANEL_IS_MENU_BUTTON (button)); button->priv->has_arrow = has_arrow != FALSE; button_widget_set_has_arrow (BUTTON_WIDGET (button), has_arrow); }
static void panel_menu_button_menu_deactivated (PanelMenuButton *button) { panel_toplevel_pop_autohide_disabler (button->priv->toplevel); #if GTK_CHECK_VERSION (3, 0, 0) gtk_widget_unset_state_flags (GTK_WIDGET (button), GTK_STATE_FLAG_PRELIGHT); #else GTK_BUTTON (button)->in_button = FALSE; #endif button_widget_set_ignore_leave (BUTTON_WIDGET (button), FALSE); }
static void panel_drawer_custom_icon_changed (GSettings *settings, gchar *key, Drawer *drawer) { char *custom_icon; custom_icon = g_settings_get_string (settings, key); if (custom_icon && custom_icon [0]) { gboolean use_custom_icon; use_custom_icon = g_settings_get_boolean (settings, PANEL_OBJECT_USE_CUSTOM_ICON_KEY); if (use_custom_icon) button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), custom_icon); } g_free (custom_icon); }
static gboolean drag_motion_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, Launcher *launcher) { if ( ! is_this_drop_ok (widget, context)) return FALSE; gdk_drag_status (context, GDK_ACTION_COPY, time); button_widget_set_dnd_highlight(BUTTON_WIDGET(widget), TRUE); return TRUE; }
static void launcher_do_zoom_animation (GtkWidget *widget) { GdkScreen *screen; GtkSettings *settings; gboolean enable_animations; ButtonWidget *button_widget; GdkPixbuf *pixbuf; PanelOrientation orientation; gint x, y; GtkAllocation allocation; screen = gtk_widget_get_screen (widget); settings = gtk_widget_get_settings (widget); enable_animations = TRUE; g_object_get (settings, "gtk-enable-animations", &enable_animations, NULL); if (!enable_animations || !gdk_screen_is_composited (screen)) return; button_widget = BUTTON_WIDGET (widget); pixbuf = button_widget_get_pixbuf (button_widget); orientation = button_widget_get_orientation (button_widget); if (!pixbuf) return; gdk_window_get_origin (gtk_widget_get_window (widget), &x, &y); gtk_widget_get_allocation (widget, &allocation); if (!gtk_widget_get_has_window (widget)) { x += allocation.x; y += allocation.y; } draw_zoom_animation_composited (screen, x, y, allocation.width, allocation.height, pixbuf, orientation); g_object_unref (pixbuf); }
void panel_action_button_set_type (PanelActionButton *button, PanelActionButtonType type) { g_return_if_fail (type > PANEL_ACTION_NONE && type < PANEL_ACTION_LAST); if (type == button->priv->type) return; button->priv->type = type; if (actions [type].icon_name != NULL) button_widget_set_icon_name (BUTTON_WIDGET (button), actions [type].icon_name); panel_util_set_tooltip_text (GTK_WIDGET (button), _(actions [type].tooltip)); panel_a11y_set_atk_name_desc (GTK_WIDGET (button), _(actions [type].tooltip), NULL); panel_action_button_update_sensitivity (button); }
void panel_drawer_set_dnd_enabled (Drawer *drawer, gboolean dnd_enabled) { if (dnd_enabled) { static GtkTargetEntry dnd_targets[] = { { "application/x-mate-panel-applet-internal", 0, 0 } }; gtk_widget_set_has_window (drawer->button, TRUE); gtk_drag_source_set (drawer->button, GDK_BUTTON1_MASK, dnd_targets, 1, GDK_ACTION_MOVE); //FIXME: we're forgetting the use_custom_icon case, here gtk_drag_source_set_icon_name (drawer->button, button_widget_get_icon_name (BUTTON_WIDGET (drawer->button))); gtk_widget_set_has_window (drawer->button, FALSE); } else gtk_drag_source_unset (drawer->button); }
static void panel_action_button_style_updated (PanelActionButton *button) { if (actions [button->priv->type].icon_name != NULL) button_widget_set_icon_name (BUTTON_WIDGET (button), actions [button->priv->type].icon_name); }