Commit 4c8f55b6 authored by Brian J. Tarricone's avatar Brian J. Tarricone Committed by Brian Tarricone

first attempt at changing mouse button for menus, with modifiers; has issues

parent eebe64cc
......@@ -59,8 +59,12 @@
#define SHOW_DESKTOP_MENU_PROP "/desktop-menu/show"
#define DESKTOP_MENU_SHOW_ICONS_PROP "/desktop-menu/show-icons"
#define DESKTOP_MENU_BUTTON_PROP "/desktop-menu/activate-button"
#define DESKTOP_MENU_MODIFIER_PROP "/desktop-menu/activate-modifier"
#define WINLIST_SHOW_WINDOWS_MENU_PROP "/windowlist-menu/show"
#define WINLIST_SHOW_APP_ICONS_PROP "/windowlist-menu/show-icons"
#define WINLIST_BUTTON_PROP "/windowlist-menu/activate-button"
#define WINLIST_MODIFIER_PROP "/windowlist-menu/activate-modifier"
#define WINLIST_SHOW_STICKY_WIN_ONCE_PROP "/windowlist-menu/show-sticky-once"
#define WINLIST_SHOW_WS_NAMES_PROP "/windowlist-menu/show-workspace-names"
#define WINLIST_SHOW_WS_SUBMENUS_PROP "/windowlist-menu/show-submenus"
......@@ -1420,11 +1424,31 @@ xfdesktop_settings_dialog_new(GladeXML *main_gxml,
G_CALLBACK(suboptions_set_sensitive), box);
suboptions_set_sensitive(GTK_TOGGLE_BUTTON(w), box);
w = glade_xml_get_widget(main_gxml, "combo_menu_btn");
gtk_combo_box_set_active(GTK_COMBO_BOX(w), 2);
xfconf_g_property_bind(channel, DESKTOP_MENU_BUTTON_PROP, G_TYPE_INT,
G_OBJECT(w), "active");
w = glade_xml_get_widget(main_gxml, "combo_menu_modifier");
gtk_combo_box_set_active(GTK_COMBO_BOX(w), 0);
xfconf_g_property_bind(channel, DESKTOP_MENU_MODIFIER_PROP, G_TYPE_INT,
G_OBJECT(w), "active");
xfconf_g_property_bind(channel, WINLIST_SHOW_APP_ICONS_PROP, G_TYPE_BOOLEAN,
G_OBJECT(glade_xml_get_widget(main_gxml,
"chk_winlist_show_app_icons")),
"active");
w = glade_xml_get_widget(main_gxml, "combo_windowlist_btn");
gtk_combo_box_set_active(GTK_COMBO_BOX(w), 1);
xfconf_g_property_bind(channel, WINLIST_BUTTON_PROP, G_TYPE_INT,
G_OBJECT(w), "active");
w = glade_xml_get_widget(main_gxml, "combo_windowlist_modifier");
gtk_combo_box_set_active(GTK_COMBO_BOX(w), 0);
xfconf_g_property_bind(channel, WINLIST_MODIFIER_PROP, G_TYPE_INT,
G_OBJECT(w), "active");
xfconf_g_property_bind(channel, WINLIST_SHOW_STICKY_WIN_ONCE_PROP,
G_TYPE_BOOLEAN,
G_OBJECT(glade_xml_get_widget(main_gxml,
......
......@@ -594,14 +594,14 @@ Transparent</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Button:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">combobox1</property>
<property name="mnemonic_widget">combo_menu_btn</property>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="combobox1">
<widget class="GtkComboBox" id="combo_menu_btn">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="items" translatable="yes">Left
......@@ -619,7 +619,7 @@ Right</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Mo_difier:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">combobox2</property>
<property name="mnemonic_widget">combo_menu_modifier</property>
</widget>
<packing>
<property name="expand">False</property>
......@@ -627,13 +627,14 @@ Right</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="combobox2">
<widget class="GtkComboBox" id="combo_menu_modifier">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="items" translatable="yes">None
Shift
Alt
Control</property>
Control
Super</property>
</widget>
<packing>
<property name="expand">False</property>
......@@ -749,6 +750,7 @@ Control</property>
<property name="spacing">6</property>
<child>
<widget class="GtkHBox" id="hbox14">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">12</property>
<child>
......@@ -757,14 +759,14 @@ Control</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">B_utton:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">combobox8</property>
<property name="mnemonic_widget">combo_windowlist_btn</property>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="combobox8">
<widget class="GtkComboBox" id="combo_windowlist_btn">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="items" translatable="yes">Left
......@@ -782,7 +784,7 @@ Right</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Modi_fier:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">combobox9</property>
<property name="mnemonic_widget">combo_windowlist_modifier</property>
</widget>
<packing>
<property name="expand">False</property>
......@@ -790,13 +792,14 @@ Right</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="combobox9">
<widget class="GtkComboBox" id="combo_windowlist_modifier">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="items" translatable="yes">None
Shift
Alt
Control</property>
Control
Super</property>
</widget>
<packing>
<property name="expand">False</property>
......
......@@ -89,6 +89,11 @@ struct _XfceDesktopPriv
XfconfChannel *channel;
gchar *property_prefix;
XfceDesktopButton menu_button;
XfceDesktopModifier menu_modifier;
XfceDesktopButton secondary_menu_button;
XfceDesktopModifier secondary_menu_modifier;
GdkPixmap *bg_pixmap;
......@@ -120,6 +125,10 @@ enum
{
PROP_0 = 0,
PROP_XINERAMA_STRETCH,
PROP_MENU_BUTTON,
PROP_MENU_MODIFIER,
PROP_SECONDARY_MENU_BUTTON,
PROP_SECONDARY_MENU_MODIFIER,
#ifdef ENABLE_DESKTOP_ICONS
PROP_ICON_STYLE,
PROP_ICON_SIZE,
......@@ -574,6 +583,36 @@ xfce_desktop_class_init(XfceDesktopClass *klass)
FALSE,
XFDESKTOP_PARAM_FLAGS));
g_object_class_install_property(gobject_class, PROP_MENU_BUTTON,
g_param_spec_enum("menu-button",
"menu button",
"menu button",
XFCE_TYPE_DESKTOP_BUTTON,
XFCE_DESKTOP_BUTTON_RIGHT,
XFDESKTOP_PARAM_FLAGS));
g_object_class_install_property(gobject_class, PROP_MENU_MODIFIER,
g_param_spec_enum("menu-modifier",
"menu modifier",
"menu modifier",
XFCE_TYPE_DESKTOP_MODIFIER,
0,
XFDESKTOP_PARAM_FLAGS));
g_object_class_install_property(gobject_class, PROP_SECONDARY_MENU_BUTTON,
g_param_spec_enum("secondary-menu-button",
"secondary menu button",
"secondary menu button",
XFCE_TYPE_DESKTOP_BUTTON,
XFCE_DESKTOP_BUTTON_MIDDLE,
XFDESKTOP_PARAM_FLAGS));
g_object_class_install_property(gobject_class, PROP_SECONDARY_MENU_MODIFIER,
g_param_spec_enum("secondary-menu-modifier",
"secondary menu modifier",
"secondary menu modifier",
XFCE_TYPE_DESKTOP_MODIFIER,
0,
XFDESKTOP_PARAM_FLAGS));
#ifdef ENABLE_DESKTOP_ICONS
g_object_class_install_property(gobject_class, PROP_ICON_STYLE,
g_param_spec_enum("icon-style",
......@@ -647,6 +686,22 @@ xfce_desktop_set_property(GObject *object,
g_value_get_boolean(value));
break;
case PROP_MENU_BUTTON:
desktop->priv->menu_button = g_value_get_enum(value);
break;
case PROP_MENU_MODIFIER:
desktop->priv->menu_modifier = g_value_get_enum(value);
break;
case PROP_SECONDARY_MENU_BUTTON:
desktop->priv->secondary_menu_button = g_value_get_enum(value);
break;
case PROP_SECONDARY_MENU_MODIFIER:
desktop->priv->secondary_menu_modifier = g_value_get_enum(value);
break;
#ifdef ENABLE_DESKTOP_ICONS
case PROP_ICON_STYLE:
xfce_desktop_set_icon_style(desktop,
......@@ -688,6 +743,22 @@ xfce_desktop_get_property(GObject *object,
g_value_set_boolean(value, desktop->priv->xinerama_stretch);
break;
case PROP_MENU_BUTTON:
g_value_set_enum(value, desktop->priv->menu_button);
break;
case PROP_MENU_MODIFIER:
g_value_set_enum(value, desktop->priv->menu_modifier);
break;
case PROP_SECONDARY_MENU_BUTTON:
g_value_set_enum(value, desktop->priv->secondary_menu_button);
break;
case PROP_SECONDARY_MENU_MODIFIER:
g_value_set_enum(value, desktop->priv->secondary_menu_modifier);
break;
#ifdef ENABLE_DESKTOP_ICONS
case PROP_ICON_STYLE:
g_value_set_enum(value, desktop->priv->icons_style);
......@@ -845,28 +916,57 @@ xfce_desktop_unrealize(GtkWidget *widget)
GTK_WIDGET_UNSET_FLAGS(widget, GTK_REALIZED);
}
static inline GdkModifierType
enum_to_modmask(XfceDesktopModifier modifier)
{
switch(modifier) {
case XFCE_DESKTOP_MOD_NONE:
return 0;
case XFCE_DESKTOP_MOD_SHIFT:
return GDK_SHIFT_MASK;
case XFCE_DESKTOP_MOD_ALT:
return GDK_MOD1_MASK|GDK_META_MASK;
case XFCE_DESKTOP_MOD_CONTROL:
return GDK_CONTROL_MASK;
case XFCE_DESKTOP_MOD_SUPER:
return GDK_SUPER_MASK|GDK_MOD4_MASK;
default:
return 0;
}
}
static gboolean
xfce_desktop_button_press_event(GtkWidget *w,
GdkEventButton *evt)
{
#define ALLOWED_MASK (GDK_SHIFT_MASK |GDK_MOD1_MASK | GDK_META_MASK \
| GDK_CONTROL_MASK | GDK_SUPER_MASK | GDK_MOD4_MASK)
XfceDesktop *desktop = XFCE_DESKTOP(w);
guint button = evt->button;
guint state = evt->state;
GdkModifierType state = (evt->state & ALLOWED_MASK);
GdkModifierType state1 = enum_to_modmask(desktop->priv->menu_modifier);
GdkModifierType state2 = enum_to_modmask(desktop->priv->secondary_menu_modifier);
DBG("click modmask: 0x%08x", state);
if(evt->type == GDK_BUTTON_PRESS) {
if(button == 2 || (button == 1 && (state & GDK_SHIFT_MASK)
&& (state & GDK_CONTROL_MASK)))
if(desktop->priv->secondary_menu_button + 1 == button
&& !(state & ~state2) && ((state & state2) || (state == state2)))
{
xfce_desktop_popup_secondary_root_menu(XFCE_DESKTOP(w),
xfce_desktop_popup_secondary_root_menu(desktop,
button, evt->time);
return TRUE;
} else if(button == 3 || (button == 1 && (state & GDK_SHIFT_MASK))) {
xfce_desktop_popup_root_menu(XFCE_DESKTOP(w),
} else if(desktop->priv->menu_button + 1 == button
&& !(state & ~state1) && ((state & state1)
|| (state == state1)))
{
xfce_desktop_popup_root_menu(desktop,
button, evt->time);
return TRUE;
}
}
return FALSE;
#undef ALLOWED_MASK
}
static gboolean
......@@ -951,6 +1051,20 @@ xfce_desktop_connect_settings(XfceDesktop *desktop)
xfconf_g_property_bind(channel, buf, G_TYPE_BOOLEAN,
G_OBJECT(desktop), "xinerama-stretch");
xfconf_g_property_bind(channel, "/desktop-menu/activate-button",
G_TYPE_INT,
G_OBJECT(desktop), "menu-button");
xfconf_g_property_bind(channel, "/desktop-menu/activate-modifier",
G_TYPE_INT,
G_OBJECT(desktop), "menu-modifier");
xfconf_g_property_bind(channel, "/windowlist-menu/activate-button",
G_TYPE_INT,
G_OBJECT(desktop), "secondary-menu-button");
xfconf_g_property_bind(channel, "/windowlist-menu/activate-modifier",
G_TYPE_INT,
G_OBJECT(desktop), "secondary-menu-modifier");
#ifdef ENABLE_DESKTOP_ICONS
#define ICONS_PREFIX "/desktop-icons/"
......
......@@ -48,6 +48,22 @@ typedef enum
XFCE_DESKTOP_ICON_STYLE_FILES,
} XfceDesktopIconStyle;
typedef enum
{
XFCE_DESKTOP_BUTTON_LEFT = 0,
XFCE_DESKTOP_BUTTON_MIDDLE,
XFCE_DESKTOP_BUTTON_RIGHT,
} XfceDesktopButton;
typedef enum
{
XFCE_DESKTOP_MOD_NONE = 0,
XFCE_DESKTOP_MOD_SHIFT,
XFCE_DESKTOP_MOD_ALT,
XFCE_DESKTOP_MOD_CONTROL,
XFCE_DESKTOP_MOD_SUPER,
} XfceDesktopModifier;
struct _XfceDesktop
{
GtkWindow window;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment