Compare commits

...

8 Commits

Author SHA1 Message Date
a91c1caf42 Bump version to 3.16.3
Update NEWS.
2015-07-02 14:26:44 +02:00
90f14d0762 app-system: Improve StartupWMClass heuristics
Our StartUpWMClass heuristics use a StartupWMClass -> .desktop ID
mapping built from the list of all installed applications. In case
of multiple .desktop files setting the same StartupWMClass, we
currently simply pick the last one returned by g_app_info_get_all (),
which can be a bit surprising:
A window with WM_CLASS 'emacs', launched through a .desktop file
named 'emacs.desktop' with a StartupWMClass of 'emacs' maps to ...
'emacsclient.desktop'!
Make this case a bit less random by preferring the app info whose
ID matches the StartupWMClass.

https://bugzilla.gnome.org/show_bug.cgi?id=751541
2015-07-02 14:21:38 +02:00
77f2e3abde gdm: fix banner allocation computation
The code to figure how how much room that banner had was wrong.
This commit fixes it.

https://bugzilla.gnome.org/show_bug.cgi?id=751517
2015-06-26 18:04:39 +02:00
a02019cf9e main: Fix a memory leak
We are pointlessly calling g_settings_list_keys() twice, without
freeing the result from the first call.
2015-06-26 18:04:31 +02:00
a341b74aeb AllView: prevent accessing a NULL effect
In some cases we might be allocated a size such that
this._grid.topPadding and this._grid.bottomPadding are both 0 which
means that the ScrollView fade effect gets removed. In that case don't
try to access the effect since it will be NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=750714
2015-06-26 18:04:11 +02:00
9e0a5fa3a9 Revert "Revert "keyboard: Handle touch events""
And make these only handled on wayland. There's a plethora of issues
around touch passive grab and touch/pointer doubly handling to use
these right away on X11, so we stick to single-touch/pointer there.

This reverts commit 032a688a72.

https://bugzilla.gnome.org/show_bug.cgi?id=750287
2015-06-02 17:59:41 +02:00
49856d4961 windowMenu: Close when corresponding window goes away
The menu is clearly associated with a particular window, so keeping
it around when the window is gone doesn't make sense - in case of
the window menu, it is actually harmful as every action will act on
the invalidated window and result in a crash. So just dismiss the
menu when the menu is unmanaged.

https://bugzilla.gnome.org/show_bug.cgi?id=749529
2015-05-21 18:21:28 +02:00
4db34fca36 layout: Set initial visibility of fullscreen-tracking chrome
When chrome is added with the trackFullscreen parameter, the actor's
visibility will be updated automatically whenever its monitor's
fullscreen state changes. However as we currently ignore the fullscreen
state at the time the chrome is added, the initial visibility may well
be incorrect - fix this by updating the initial visibility as necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=749383
2015-05-21 14:01:35 +02:00
9 changed files with 74 additions and 19 deletions

9
NEWS
View File

@ -1,3 +1,12 @@
3.16.3
======
* Handle touch events in OSK on wayland [Rui; #750287]
* Misc. bug fixes [Florian, Rui, Ray; #749383, #749529, #750714, #751517,
#751541]
Contributors:
Rui Matos, Florian Müllner, Ray Strode
3.16.2
======
* Make event highlight in calendar more prominent [Jakub; #747715]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.16.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.16.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])

View File

@ -584,7 +584,14 @@ const LoginDialog = new Lang.Class({
// try a different layout, or if we have what extra space we
// can hand out
if (bannerAllocation) {
let leftOverYSpace = dialogHeight - bannerHeight - authPromptHeight - logoHeight;
let bannerSpace;
if (authPromptAllocation)
bannerSpace = authPromptAllocation.y1 - bannerAllocation.y1;
else
bannerSpace = 0;
let leftOverYSpace = bannerSpace - bannerHeight;
if (leftOverYSpace > 0) {
// First figure out how much left over space is up top

View File

@ -753,7 +753,8 @@ const AllView = new Lang.Class({
let fadeOffset = Math.min(this._grid.topPadding,
this._grid.bottomPadding);
this._scrollView.update_fade_effect(fadeOffset, 0);
this._scrollView.get_effect('fade').fade_edges = true;
if (fadeOffset > 0)
this._scrollView.get_effect('fade').fade_edges = true;
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
this._adjustment.value = 0;

View File

@ -114,6 +114,35 @@ const Key = new Lang.Class({
key.release();
return Clutter.EVENT_PROPAGATE;
}));
button.connect('touch-event', Lang.bind(this,
function (actor, event) {
let device = event.get_device();
let sequence = event.get_event_sequence();
// We only handle touch events here on wayland. On X11
// we do get emulated pointer events, which already works
// for single-touch cases. Besides, the X11 passive touch grab
// set up by Mutter will make us see first the touch events
// and later the pointer events, so it will look like two
// unrelated series of events, we want to avoid double handling
// in these cases.
if (!Meta.is_wayland_compositor())
return Clutter.EVENT_PROPAGATE;
if (!this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_BEGIN) {
device.sequence_grab(sequence, actor);
this._touchPressed = true;
key.press();
} else if (this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_END &&
device.sequence_get_grabbed_actor(sequence) == actor) {
device.sequence_ungrab(sequence);
this._touchPressed = false;
key.release();
}
return Clutter.EVENT_PROPAGATE;
}));
return button;
},

View File

@ -837,6 +837,7 @@ const LayoutManager = new Lang.Class({
// need to connect to 'destroy' too.
this._trackedActors.push(actorData);
this._updateActorVisibility(actorData);
this._queueUpdateRegions();
},
@ -855,25 +856,23 @@ const LayoutManager = new Lang.Class({
this._queueUpdateRegions();
},
_updateActorVisibility: function(actorData) {
if (!actorData.trackFullscreen)
return;
let monitor = this.findMonitorForActor(actorData.actor);
actorData.actor.visible = !(global.window_group.visible &&
monitor &&
monitor.inFullscreen);
},
_updateVisibility: function() {
let windowsVisible = Main.sessionMode.hasWindows && !this._inOverview;
global.window_group.visible = windowsVisible;
global.top_window_group.visible = windowsVisible;
for (let i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i], visible;
if (!actorData.trackFullscreen)
continue;
if (!windowsVisible)
visible = true;
else if (this.findMonitorForActor(actorData.actor).inFullscreen)
visible = false;
else
visible = true;
actorData.actor.visible = visible;
}
this._trackedActors.forEach(Lang.bind(this, this._updateActorVisibility));
},
getWorkAreaForMonitor: function(monitorIndex) {

View File

@ -167,6 +167,10 @@ const WindowMenuManager = new Lang.Class({
menu.connect('activate', function() {
window.check_alive(global.get_current_time());
});
let destroyId = window.connect('unmanaged',
function() {
menu.close();
});
this._sourceActor.set_size(rect.width, rect.height);
this._sourceActor.set_position(rect.x, rect.y);
@ -180,6 +184,7 @@ const WindowMenuManager = new Lang.Class({
this._sourceActor.hide();
menu.destroy();
window.disconnect(destroyId);
}));
}
});

View File

@ -181,7 +181,6 @@ shell_prefs_init (void)
g_object_get (G_OBJECT (settings), "schema-id", &schema_id, NULL);
keys = g_settings_list_keys (settings);
for (keys = k = g_settings_list_keys (settings); *k; k++)
meta_prefs_override_preference_schema (*k, schema_id);

View File

@ -83,12 +83,18 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
for (l = apps; l != NULL; l = l->next)
{
GAppInfo *info = l->data;
const char *startup_wm_class, *id;
const char *startup_wm_class, *id, *old_id;
id = g_app_info_get_id (info);
startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info));
if (startup_wm_class != NULL)
if (startup_wm_class == NULL)
continue;
/* In case multiple .desktop files set the same StartupWMClass, prefer
* the one where ID and StartupWMClass match */
old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class);
if (old_id == NULL || strcmp (id, startup_wm_class) == 0)
g_hash_table_insert (priv->startup_wm_class_to_id,
g_strdup (startup_wm_class), g_strdup (id));
}