We now have functionality in Mutter to grab the keyboard on behalf
of a plugin. This avoids interactions with the key handling code
in Mutter that could leave the user with an inconsistent state
and no way to get out of it.
src/shell-global.[ch]: Change shell_global_grab_keyboard() and
shell_global_grab_keyboard() to shell_global_begin_modal()
shell_global_end_modal() and call mutter_plugin_begin_modal()
mutter_plugin_end_modal() rather than directly grabbing the
keyboard.
main.js: Call global.begin_modal/end_modal from Main.startModal()
and Main.endModal()
altTab.js; Remove call to Main.startModal() - we're letting Mutter
handle modality for Alt-Tab.
main.js lookingGlass.js overview.js runDialog.js: Rename
Main.startModal() to Main.beginModal() for consistency with
naming in mutter and ShellGlobal.
http://bugzilla.gnome.org/show_bug.cgi?id=590686
Display search results in the dash instead of showing them in a separate pane.
We get dynamic allocation for the section height based on the number of
results, but a lot of the problems with the previous search results display,
such as displaying empty sections and paging overflow are still present.
Also, we don't yet close the browse pane for applications or documents when
we display the search results and only replace it if we are showing the
details pane, so all that looks weird. We'll need to work out the interaction
for these cases.
This fixes a bug where we were already using this._hotCorner
in _onHotCornerEnvironsLeft() and were incorrectly setting
this._hotCornerEntered to false when the hot corner was
re-entered from the environs.
Rather than just launching if we weren't already running, always
relaunch, which happens to make Firefox, etc. work. See
the comment in the commit for more explanation.
Add drag and drop. We need to be able to recreate the icon texture,
so instead of passing it directly into PlaceDisplay, pass
a factory function which knows how to create a new texture.
The design has smaller icons in two columns. Add a new
custom display to docDisplay for it.
Clean up some of the texture cache handling for recent URIs so
it's not size-dependent, since the dash size is now different
from the default GenericDisplay size.
We had multiple copies of the code to position a drag actor given a particular
source. Instead, just put it inside dnd.js.
Second, rather than test for GenericDisplay/WellDisplayItem etc.,
in various places, add a new method on each source "shellWorkspaceLaunch"
which both marks the item as being droppable on a workspace, and is
called by the workspaces code to launch the item.
Use MetaGroup for a window when looking up applications. If
we know the application for a TYPE_NORMAL window in the group,
use that.
However, we aren't always going to know the application for a window. In
that case, create a fake one.
ShellAppInfo has a "transient" flag so we know not to write these
fake apps to the usage file.
Clean up the idle focus handler to better handle the case where
no window is focused, and where we don't want to track the
particular window.
Update track_window to create the fake window.
When a window goes away, we want to delete the usage.
Rewrite shell_app_monitor_get_running_apps to be based
on the window_to_app hash, because that's what has the pointer
to ShellAppInfo*. Before we were looking up all ids through
ShellAppSystem, but that shouldn't be holding a ref to transients.
Change the well display icon to be centered, since our icons for
window apps aren't 48 pixels.
Using a larger area around the hot corner to decide if the user has left the
hot corner prevents triggering the hot corner multiple times due to an
accidental jitter.
We need to use the -lib variant which in turn uses the
GETTEXT_PACKAGE define, because the default translation
domain is actually mutter, not gnome-shell.
We don't have a lot of strings, and what ones we do have we've
been avoiding duplication. This patch adds calls to _() i.e. gettext
for those strings we do have.
The maximize effect looked really ugly. In the absence of any cooler
effects, none at all is better than what we have. Current compiz
doesn't have one either.
Note that in the future when we merge the frame into the panel
in the maximize case, we may want an effect for that.
Instead of counting on the implicit sizing of ClutterGroup, which isn't
going to work well because of current limitations of ClutterClone, set
the size of workspace explicitly based on the screen size.
This should fix various problems with drag-and-drop being unreliable;
if a workspace was sized to big it could overlap other workspaces or
elements of the overview.
http://bugzilla.gnome.org/show_bug.cgi?id=591643
There was some weirdness relating to when the search pane is shown
in a timeout, and how that relates to setSearch. Instead of doing
this in the timeout, just call setSearch() in the timeout. The
pane hide/show state is directly controlled from the handler.
Currently ShellAppMonitor relies on all the .desktop files being
loaded. We should initialize it very early to ensure that anything
that uses it has up-to-date information right away.
Remove the last use of passing width into Dash by having the
Pane with the previews scaling dynamically and relying on
Clutter scaling.
If we only have one workspace, don't display a selection frame
for it.
Rework Dash into a searchArea and sectionArea, which get
explicitly sized by overlay.js. We use the workspaces size
to choose the size of those dash areas.
Switch dash colors/boxes etc. to ones from shell-black02.
Add a gradient to the panel.
Add a magnifier.svg for use in search.
minWidth and minHeight arguments of the Button class were not used.
Panel buttons need their height to be explicitly specified as
PANEL_HEIGHT to take up full panel height. This fixes the problem with the
user not being able to click at the very top edge of the panel to activate
the button.
This is a start at the "Active Appliction Item" component of the
shell design. Currently we just show the currently focused
application. When launching a new application, we show that as well.
The implementation here is not complete; basically when launching
we de-focus the active one, and the application well shows the
most recent startup sequence.
This kind of fails in the case of multiple sequences, and we
also don't correctly de-focus the current window in other
launch paths.
There was lots of fixed positioning in the Panel; now it is completely
dynamic, and width/height is driven from main.js. We still have a
global constant Panel.PANEL_HEIGHT, but this is a big step towards
eliminating it.
Also, this avoids overdraw in the "way too many tray icons" case. The
clock will shift left.
Replace 'overlay' with the more descriptive name 'overview'
where the Activities Overview is meant. Call it Overview
(capitalized) in code comments.
The overlay-group and overlay-key provided by Mutter are not
affected, since they may be used for other components than
the Activities Overview.
Instead of only transforming the active workspace, create a
zooming effect when showing or hiding the overlay. This makes
the transitions simpler: the workspaces are now fixed to the
overlay actor group and will not slide over the Dash.
overlay.js: Add zoom animations, fade in/out Dash during those,
remove obsolete Dash clipping and stacking logic, add public
get[Scale|Position]() and getZoomedIn[Scale|Position]()
functions.
workspaces.js: Remove zoom animations, add fade animations for
the remove button, add helper functions for the overlay
zooming, keep the movement of windows linear to that of
their workspaces, remove the updatePosition() and
updateInOverlay() functions and fullSize variables that
were left from the old overlay design.
The "expanded background" that is behind the workspaces etc. in the overview
should be removed. It isn't in the designs, it is distracting, and it breaks
the overview metaphor.
At least temporarily, just make the background of the overview black.
Change the pane popup to black as well, but keep a blue border so that
it is visually distinguished from the background.
Based on a patch by Colin Walters, with fixes from Marina Zhurakhinskaya.
It's both intuitive to go to the corner of the screen
and click the activities button at the same time.
Both actions bring up the overlay, but combined
they cancel each other out. This commit makes
clicking the hot corner not cancel the act of
going to the hot corner.
Based on a patch from Ray Strode.
The scale of windows within a workspace is determined by the
scale of the workspace since we never scale a window bigger
than the original size of the window. So when we rescale
workspaces we have to rerun Workspace.positionWindows().
http://bugzilla.gnome.org/show_bug.cgi?id=591124
The onComplete when positioning windows may come before the
final stage of the workspace positioning animation. So we can't
use actor.get_transformed_position() to figure out where to put
the icons. Compute the final position manually ourselves instead.
http://bugzilla.gnome.org/show_bug.cgi?id=591123
Both the position and size of the frame actor depend on the scale
of the workspace, so update them both when the scale changes.
On the other hand, the the frame actor doesn't need to be
repositioned when the workspace moves (since it is relative to the
workspace). We do base the frame position of the desktop actor, but
that will presumably stay fixed (at 0,0) in most all cases.
http://bugzilla.gnome.org/show_bug.cgi?id=591122
When Workspace._positionWindows is called, the clone might nto
yet have its final size (because of the clone is is a clone of
the window texture and the window texture isn't updated until
right before painting.) So get the size from the MetaWindow
instead ... the MetaWindow size is determined synchronously when
the window is managed.
http://bugzilla.gnome.org/show_bug.cgi?id=590741
Take everything in the ~/.gtk-bookmark lines after the URI
as label, not only the first word. (eg. if there's a line like
"file:///home/rainct/Ubuntu%20One Ubuntu One", now "Ubuntu One"
is taken as the label, instead of only "Ubuntu").
Pass the error variable to g_key_file_load_from_data_dirs in
Shell.AppSystem.get_default().load_from_desktop_file again, and
use a try/catch in places.js.