Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
xfdesktop
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
Jason Yavorska
xfdesktop
Commits
4c8f55b6
Commit
4c8f55b6
authored
Aug 30, 2008
by
Brian J. Tarricone
Committed by
Brian Tarricone
Aug 13, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
first attempt at changing mouse button for menus, with modifiers; has issues
parent
eebe64cc
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
175 additions
and
18 deletions
+175
-18
settings/main.c
settings/main.c
+25
-1
settings/xfdesktop-settings.glade
settings/xfdesktop-settings.glade
+13
-10
src/xfce-desktop.c
src/xfce-desktop.c
+121
-7
src/xfce-desktop.h
src/xfce-desktop.h
+16
-0
No files found.
settings/main.c
View file @
4c8f55b6
...
...
@@ -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
,
...
...
settings/xfdesktop-settings.glade
View file @
4c8f55b6
...
...
@@ -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"
>
combo
box1
</property>
<property
name=
"mnemonic_widget"
>
combo
_menu_btn
</property>
</widget>
<packing>
<property
name=
"expand"
>
False
</property>
</packing>
</child>
<child>
<widget
class=
"GtkComboBox"
id=
"combo
box1
"
>
<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"
>
combo
box2
</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=
"combo
box2
"
>
<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"
>
combo
box8
</property>
<property
name=
"mnemonic_widget"
>
combo
_windowlist_btn
</property>
</widget>
<packing>
<property
name=
"expand"
>
False
</property>
</packing>
</child>
<child>
<widget
class=
"GtkComboBox"
id=
"combo
box8
"
>
<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"
>
combo
box9
</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=
"combo
box9
"
>
<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>
...
...
src/xfce-desktop.c
View file @
4c8f55b6
...
...
@@ -90,6 +90,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
;
guint
nbackdrops
;
...
...
@@ -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/"
...
...
src/xfce-desktop.h
View file @
4c8f55b6
...
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment