ui: move userAvatar to own file
There are a few places in the code that use the UserAvatar widget without using the user menu. Since the avatar is used outside of the user menu, move it from userMenu.js to its own file.
This commit is contained in:
parent
026ec2d4c2
commit
4f135be89a
@ -97,6 +97,7 @@ nobase_dist_js_DATA = \
|
||||
ui/switcherPopup.js \
|
||||
ui/tweener.js \
|
||||
ui/unlockDialog.js \
|
||||
ui/userAvatar.js \
|
||||
ui/userMenu.js \
|
||||
ui/userWidget.js \
|
||||
ui/viewSelector.js \
|
||||
|
@ -40,7 +40,7 @@ const GdmUtil = imports.gdm.util;
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
const UserAvatar = imports.ui.userAvatar;
|
||||
const UserWidget = imports.ui.userWidget;
|
||||
|
||||
const _FADE_ANIMATION_TIME = 0.25;
|
||||
@ -67,7 +67,7 @@ const UserListItem = new Lang.Class({
|
||||
x_align: St.Align.START,
|
||||
x_fill: true });
|
||||
|
||||
this._userAvatar = new UserMenu.UserAvatarWidget(this.user,
|
||||
this._userAvatar = new UserAvatar.UserAvatar(this.user,
|
||||
{ styleClass: 'login-dialog-user-list-item-icon' });
|
||||
layout.add(this._userAvatar.actor);
|
||||
let textLayout = new St.BoxLayout({ style_class: 'login-dialog-user-list-item-text-box',
|
||||
|
@ -16,7 +16,7 @@ const PolkitAgent = imports.gi.PolkitAgent;
|
||||
const Components = imports.ui.components;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
const UserAvatar = imports.ui.userAvatar;
|
||||
|
||||
const DIALOG_ICON_SIZE = 48;
|
||||
|
||||
@ -100,7 +100,7 @@ const AuthenticationDialog = new Lang.Class({
|
||||
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
|
||||
vertical: false });
|
||||
messageBox.add(userBox);
|
||||
this._userAvatar = new UserMenu.UserAvatarWidget(this._user,
|
||||
this._userAvatar = new UserAvatar.UserAvatar(this._user,
|
||||
{ iconSize: DIALOG_ICON_SIZE,
|
||||
styleClass: 'polkit-dialog-user-icon' });
|
||||
this._userAvatar.actor.hide();
|
||||
|
@ -35,7 +35,7 @@ const GnomeSession = imports.misc.gnomeSession;
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
const UserAvatar = imports.ui.userAvatar;
|
||||
|
||||
let _endSessionDialog = null;
|
||||
|
||||
@ -360,7 +360,7 @@ const EndSessionDialog = new Lang.Class({
|
||||
icon_size: _DIALOG_ICON_SIZE,
|
||||
style_class: dialogContent.iconStyleClass });
|
||||
} else {
|
||||
let avatarWidget = new UserMenu.UserAvatarWidget(this._user,
|
||||
let avatarWidget = new UserAvatar.UserAvatar(this._user,
|
||||
{ iconSize: _DIALOG_ICON_SIZE,
|
||||
styleClass: dialogContent.iconStyleClass });
|
||||
this._iconBin.child = avatarWidget.actor;
|
||||
|
52
js/ui/userAvatar.js
Normal file
52
js/ui/userAvatar.js
Normal file
@ -0,0 +1,52 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Params = imports.misc.params;
|
||||
|
||||
const DIALOG_ICON_SIZE = 64;
|
||||
|
||||
// Adapted from gdm/gui/user-switch-applet/applet.c
|
||||
//
|
||||
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
|
||||
// Copyright (C) 2008,2009 Red Hat, Inc.
|
||||
|
||||
const UserAvatar = new Lang.Class({
|
||||
Name: 'UserAvatar',
|
||||
|
||||
_init: function(user, params) {
|
||||
this._user = user;
|
||||
params = Params.parse(params, { reactive: false,
|
||||
iconSize: DIALOG_ICON_SIZE,
|
||||
styleClass: 'status-chooser-user-icon' });
|
||||
this._iconSize = params.iconSize;
|
||||
|
||||
this.actor = new St.Bin({ style_class: params.styleClass,
|
||||
track_hover: params.reactive,
|
||||
reactive: params.reactive });
|
||||
},
|
||||
|
||||
setSensitive: function(sensitive) {
|
||||
this.actor.can_focus = sensitive;
|
||||
this.actor.reactive = sensitive;
|
||||
},
|
||||
|
||||
update: function() {
|
||||
let iconFile = this._user.get_icon_file();
|
||||
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
|
||||
iconFile = null;
|
||||
|
||||
if (iconFile) {
|
||||
let file = Gio.File.new_for_path(iconFile);
|
||||
this.actor.child = null;
|
||||
this.actor.style = 'background-image: url("%s");'.format(iconFile);
|
||||
} else {
|
||||
this.actor.style = null;
|
||||
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
||||
icon_size: this._iconSize });
|
||||
}
|
||||
}
|
||||
});
|
@ -21,6 +21,7 @@ const ModalDialog = imports.ui.modalDialog;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Params = imports.misc.params;
|
||||
const UserAvatar = imports.ui.userAvatar;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
||||
@ -57,48 +58,6 @@ const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session
|
||||
|
||||
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
||||
|
||||
// Adapted from gdm/gui/user-switch-applet/applet.c
|
||||
//
|
||||
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
|
||||
// Copyright (C) 2008,2009 Red Hat, Inc.
|
||||
|
||||
const UserAvatarWidget = new Lang.Class({
|
||||
Name: 'UserAvatarWidget',
|
||||
|
||||
_init: function(user, params) {
|
||||
this._user = user;
|
||||
params = Params.parse(params, { reactive: false,
|
||||
iconSize: DIALOG_ICON_SIZE,
|
||||
styleClass: 'status-chooser-user-icon' });
|
||||
this._iconSize = params.iconSize;
|
||||
|
||||
this.actor = new St.Bin({ style_class: params.styleClass,
|
||||
track_hover: params.reactive,
|
||||
reactive: params.reactive });
|
||||
},
|
||||
|
||||
setSensitive: function(sensitive) {
|
||||
this.actor.can_focus = sensitive;
|
||||
this.actor.reactive = sensitive;
|
||||
},
|
||||
|
||||
update: function() {
|
||||
let iconFile = this._user.get_icon_file();
|
||||
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
|
||||
iconFile = null;
|
||||
|
||||
if (iconFile) {
|
||||
let file = Gio.File.new_for_path(iconFile);
|
||||
this.actor.child = null;
|
||||
this.actor.style = 'background-image: url("%s");'.format(iconFile);
|
||||
} else {
|
||||
this.actor.style = null;
|
||||
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
||||
icon_size: this._iconSize });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const IMStatusItem = new Lang.Class({
|
||||
Name: 'IMStatusItem',
|
||||
Extends: PopupMenu.PopupBaseMenuItem,
|
||||
@ -170,7 +129,7 @@ const IMStatusChooserItem = new Lang.Class({
|
||||
this._userManager = AccountsService.UserManager.get_default();
|
||||
this._user = this._userManager.get_user(GLib.get_user_name());
|
||||
|
||||
this._avatar = new UserAvatarWidget(this._user, { reactive: true });
|
||||
this._avatar = new UserAvatar.UserAvatar(this._user, { reactive: true });
|
||||
this._iconBin = new St.Button({ child: this._avatar.actor });
|
||||
this.addActor(this._iconBin);
|
||||
|
||||
@ -908,7 +867,7 @@ const UserMenuButton = new Lang.Class({
|
||||
let session = sessions[i];
|
||||
let userEntry = new St.BoxLayout({ style_class: 'login-dialog-user-list-item',
|
||||
vertical: false });
|
||||
let avatar = new UserAvatarWidget(session.user);
|
||||
let avatar = new UserAvatar.UserAvatar(session.user);
|
||||
avatar.update();
|
||||
userEntry.add(avatar.actor);
|
||||
|
||||
|
@ -6,7 +6,7 @@ const AccountsService = imports.gi.AccountsService;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
const UserAvatar = imports.ui.userAvatar;
|
||||
|
||||
const UserWidget = new Lang.Class({
|
||||
Name: 'UserWidget',
|
||||
@ -18,7 +18,7 @@ const UserWidget = new Lang.Class({
|
||||
vertical: false });
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._avatar = new UserMenu.UserAvatarWidget(user);
|
||||
this._avatar = new UserAvatar.UserAvatar(user);
|
||||
this.actor.add(this._avatar.actor,
|
||||
{ x_fill: true, y_fill: true });
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user