summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-06-03 19:25:58 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-06-03 19:25:58 +0300
commit6b6f38a9371646b747bbec132e842c7f3c82ebd1 (patch)
tree751a61986fa440d8bc9ef5e52d8c00d9e9224555
parent3201830924f2c1ec0a763ebfd4d7250c95448cf3 (diff)
downloadmetacity-6b6f38a9371646b747bbec132e842c7f3c82ebd1.tar.gz
display: return boolean in meta_display_devirtualize_modifiers
-rw-r--r--src/core/display-private.h6
-rw-r--r--src/core/display.c54
2 files changed, 36 insertions, 24 deletions
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 85c98f8b..e85818ea 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -461,9 +461,9 @@ int meta_resize_gravity_from_grab_op (MetaGrabOp op);
gboolean meta_grab_op_is_moving (MetaGrabOp op);
gboolean meta_grab_op_is_resizing (MetaGrabOp op);
-void meta_display_devirtualize_modifiers (MetaDisplay *display,
- MetaVirtualModifier modifiers,
- unsigned int *mask);
+gboolean meta_display_devirtualize_modifiers (MetaDisplay *display,
+ MetaVirtualModifier modifiers,
+ unsigned int *mask);
void meta_display_increment_focus_sentinel (MetaDisplay *display);
void meta_display_decrement_focus_sentinel (MetaDisplay *display);
diff --git a/src/core/display.c b/src/core/display.c
index 8456f9b8..4db019ea 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -4791,33 +4791,45 @@ meta_display_stack_cmp (const void *a,
return 0; /* not reached in theory, if windows on same display */
}
-void
+static gboolean
+devirtualize_modifiers (MetaVirtualModifier modifiers,
+ MetaVirtualModifier virtual_mask,
+ unsigned int real_mask,
+ unsigned int *mask)
+{
+ if (modifiers & virtual_mask)
+ {
+ if (real_mask == 0)
+ return FALSE;
+
+ *mask |= real_mask;
+ }
+
+ return TRUE;
+}
+
+gboolean
meta_display_devirtualize_modifiers (MetaDisplay *display,
MetaVirtualModifier modifiers,
unsigned int *mask)
{
+ gboolean devirtualized;
+
+ devirtualized = TRUE;
*mask = 0;
- if (modifiers & META_VIRTUAL_SHIFT_MASK)
- *mask |= ShiftMask;
- if (modifiers & META_VIRTUAL_CONTROL_MASK)
- *mask |= ControlMask;
- if (modifiers & META_VIRTUAL_ALT_MASK)
- *mask |= Mod1Mask;
- if (modifiers & META_VIRTUAL_META_MASK)
- *mask |= display->meta_mask;
- if (modifiers & META_VIRTUAL_HYPER_MASK)
- *mask |= display->hyper_mask;
- if (modifiers & META_VIRTUAL_SUPER_MASK)
- *mask |= display->super_mask;
- if (modifiers & META_VIRTUAL_MOD2_MASK)
- *mask |= Mod2Mask;
- if (modifiers & META_VIRTUAL_MOD3_MASK)
- *mask |= Mod3Mask;
- if (modifiers & META_VIRTUAL_MOD4_MASK)
- *mask |= Mod4Mask;
- if (modifiers & META_VIRTUAL_MOD5_MASK)
- *mask |= Mod5Mask;
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_SHIFT_MASK, ShiftMask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_CONTROL_MASK, ControlMask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_ALT_MASK, Mod1Mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_META_MASK, display->meta_mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_HYPER_MASK, display->hyper_mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_SUPER_MASK, display->super_mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_MOD2_MASK, Mod2Mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_MOD3_MASK, Mod3Mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_MOD4_MASK, Mod4Mask, mask);
+ devirtualized &= devirtualize_modifiers (modifiers, META_VIRTUAL_MOD5_MASK, Mod5Mask, mask);
+
+ return devirtualized;
}
static void