diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 868a9820f..fd057349a 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -3137,6 +3137,24 @@ handle_maximize_horizontally (MetaDisplay *display,
}
}
+static void
+handle_always_on_top (MetaDisplay *display,
+ MetaScreen *screen,
+ MetaWindow *window,
+ XIDeviceEvent *event,
+ MetaKeyBinding *binding,
+ gpointer dummy)
+{
+ if (window->wm_state_above == FALSE)
+ {
+ meta_window_make_above (window);
+ }
+ else
+ {
+ meta_window_unmake_above (window);
+ }
+}
+
/* Move a window to a corner; to_bottom/to_right are FALSE for the
* top or left edge, or TRUE for the bottom/right edge. xchange/ychange
* are FALSE if that dimension is not to be changed, TRUE otherwise.
@@ -4650,6 +4668,13 @@ init_builtin_key_bindings (MetaDisplay *display)
META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
handle_maximize_horizontally, 0);
+ add_builtin_keybinding (display,
+ "always-on-top",
+ mutter_keybindings,
+ META_KEY_BINDING_PER_WINDOW,
+ META_KEYBINDING_ACTION_ALWAYS_ON_TOP,
+ handle_always_on_top, 0);
+
add_builtin_keybinding (display,
"move-to-corner-nw",
common_keybindings,
diff --git a/src/meta/prefs.h b/src/meta/prefs.h
index e772e7514..14fd5c7de 100644
--- a/src/meta/prefs.h
+++ b/src/meta/prefs.h
@@ -248,6 +248,7 @@ void meta_prefs_set_ignore_request_hide_titlebar (gboolean whether);
* @META_KEYBINDING_ACTION_LOWER: FILLME
* @META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY: FILLME
* @META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY: FILLME
+ * @META_KEYBINDING_ACTION_ALWAYS_ON_TOP: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW: FILLME
@@ -339,6 +340,7 @@ typedef enum _MetaKeyBindingAction
META_KEYBINDING_ACTION_RAISE,
META_KEYBINDING_ACTION_LOWER,
META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY,
+ META_KEYBINDING_ACTION_ALWAYS_ON_TOP,
META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE,
diff --git a/src/org.gnome.mutter.gschema.xml.in b/src/org.gnome.mutter.gschema.xml.in
index 9d83cf3aa..5ef2b9aa3 100644
--- a/src/org.gnome.mutter.gschema.xml.in
+++ b/src/org.gnome.mutter.gschema.xml.in
@@ -93,6 +93,14 @@
+
+ 'Super_W'
+ <_summary>Modifier to toggle Always on Top status on windows
+ <_description>
+ This key will toggle the "Always on Top" status of a window.
+
+
+