AppWell: If an application is running, activate an existing window
Instead of relaunching, pick the first window and activate
This commit is contained in:
parent
70c51beeeb
commit
92e9bc85a1
@ -467,8 +467,7 @@ WellDisplayItem.prototype = {
|
|||||||
}));
|
}));
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
this.actor.connect('button-release-event', Lang.bind(this, function (b, e) {
|
this.actor.connect('button-release-event', Lang.bind(this, function (b, e) {
|
||||||
this.launch();
|
this._handleActivate();
|
||||||
this.emit('activated');
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let draggable = DND.makeDraggable(this.actor);
|
let draggable = DND.makeDraggable(this.actor);
|
||||||
@ -480,7 +479,7 @@ WellDisplayItem.prototype = {
|
|||||||
|
|
||||||
this.actor.append(iconBox, Big.BoxPackFlags.NONE);
|
this.actor.append(iconBox, Big.BoxPackFlags.NONE);
|
||||||
|
|
||||||
let count = Shell.AppMonitor.get_default().get_window_count(appInfo.appId);
|
this._windows = Shell.AppMonitor.get_default().get_windows_for_app(appInfo.appId)
|
||||||
|
|
||||||
let nameBox = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
let nameBox = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
||||||
x_align: Big.BoxAlignment.CENTER });
|
x_align: Big.BoxAlignment.CENTER });
|
||||||
@ -492,7 +491,7 @@ WellDisplayItem.prototype = {
|
|||||||
line_wrap_mode: Pango.WrapMode.WORD_CHAR,
|
line_wrap_mode: Pango.WrapMode.WORD_CHAR,
|
||||||
text: appInfo.name });
|
text: appInfo.name });
|
||||||
nameBox.append(this._name, Big.BoxPackFlags.EXPAND);
|
nameBox.append(this._name, Big.BoxPackFlags.EXPAND);
|
||||||
if (count > 0) {
|
if (this._windows.length > 0) {
|
||||||
let runningBox = new Big.Box({ /* border_color: GenericDisplay.ITEM_DISPLAY_NAME_COLOR,
|
let runningBox = new Big.Box({ /* border_color: GenericDisplay.ITEM_DISPLAY_NAME_COLOR,
|
||||||
border: 1,
|
border: 1,
|
||||||
padding: 1 */ });
|
padding: 1 */ });
|
||||||
@ -503,6 +502,16 @@ WellDisplayItem.prototype = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_handleActivate: function () {
|
||||||
|
if (this._windows.length == 0)
|
||||||
|
this.launch();
|
||||||
|
else {
|
||||||
|
let first = this._windows[0];
|
||||||
|
first.activate(Clutter.get_current_event_time());
|
||||||
|
}
|
||||||
|
this.emit('activated');
|
||||||
|
},
|
||||||
|
|
||||||
// Opens an application represented by this display item.
|
// Opens an application represented by this display item.
|
||||||
launch : function() {
|
launch : function() {
|
||||||
this.appInfo.launch();
|
this.appInfo.launch();
|
||||||
|
@ -377,11 +377,34 @@ load_initial_windows (ShellAppMonitor *monitor)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
guint
|
/**
|
||||||
shell_app_monitor_get_window_count (ShellAppMonitor *self,
|
* shell_app_monitor_get_windows_for_app:
|
||||||
const char *appid)
|
* @self:
|
||||||
|
* @appid: Find windows for this id
|
||||||
|
*
|
||||||
|
* Returns: (transfer container) (element-type MetaWindow): List of #MetaWindow corresponding to appid
|
||||||
|
*/
|
||||||
|
GSList *
|
||||||
|
shell_app_monitor_get_windows_for_app (ShellAppMonitor *self,
|
||||||
|
const char *appid)
|
||||||
{
|
{
|
||||||
return GPOINTER_TO_UINT (g_hash_table_lookup (self->running_appids, appid));
|
GHashTableIter iter;
|
||||||
|
gpointer key, value;
|
||||||
|
GSList *ret = NULL;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, self->window_to_appid);
|
||||||
|
|
||||||
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
|
{
|
||||||
|
MetaWindow *window = key;
|
||||||
|
const char *id = value;
|
||||||
|
|
||||||
|
if (strcmp (id, appid) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ret = g_slist_prepend (ret, window);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -44,7 +44,7 @@ GSList *shell_app_monitor_get_most_used_apps (ShellAppMonitor *monitor,
|
|||||||
int activity,
|
int activity,
|
||||||
gint number);
|
gint number);
|
||||||
|
|
||||||
guint shell_app_monitor_get_window_count (ShellAppMonitor *monitor, const char *appid);
|
GSList *shell_app_monitor_get_windows_for_app (ShellAppMonitor *monitor, const char *appid);
|
||||||
|
|
||||||
/* Get whatever's running right now */
|
/* Get whatever's running right now */
|
||||||
GList *shell_app_monitor_get_running_app_ids (ShellAppMonitor *monitor);
|
GList *shell_app_monitor_get_running_app_ids (ShellAppMonitor *monitor);
|
||||||
|
Loading…
Reference in New Issue
Block a user