diff options
-rw-r--r-- | configure.ac | 5 | ||||
-rw-r--r-- | data/icons/16x16/Makefile.am | 2 | ||||
-rw-r--r-- | data/icons/16x16/status/Makefile.am | 7 | ||||
-rw-r--r-- | data/icons/16x16/status/account-logged-in.png | bin | 0 -> 962 bytes | |||
-rw-r--r-- | data/icons/22x22/Makefile.am | 2 | ||||
-rw-r--r-- | data/icons/22x22/status/Makefile.am | 7 | ||||
-rw-r--r-- | data/icons/22x22/status/account-logged-in.png | bin | 0 -> 1356 bytes | |||
-rw-r--r-- | data/icons/24x24/Makefile.am | 2 | ||||
-rw-r--r-- | data/icons/24x24/status/Makefile.am | 7 | ||||
-rw-r--r-- | data/icons/24x24/status/account-logged-in.png | bin | 0 -> 1356 bytes | |||
-rw-r--r-- | data/icons/32x32/Makefile.am | 2 | ||||
-rw-r--r-- | data/icons/32x32/status/Makefile.am | 7 | ||||
-rw-r--r-- | data/icons/32x32/status/account-logged-in.png | bin | 0 -> 2136 bytes | |||
-rw-r--r-- | data/icons/scalable/Makefile.am | 2 | ||||
-rw-r--r-- | data/icons/scalable/status/Makefile.am | 7 | ||||
-rw-r--r-- | data/icons/scalable/status/account-logged-in.svg | 270 | ||||
-rw-r--r-- | src/dbus-shared-names.h | 4 | ||||
-rw-r--r-- | src/indicator-session.c | 30 | ||||
-rw-r--r-- | src/session-service.c | 8 |
19 files changed, 355 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac index 1b4ecfa..b401694 100644 --- a/configure.ac +++ b/configure.ac @@ -132,14 +132,19 @@ data/Makefile data/icons/Makefile data/icons/16x16/Makefile data/icons/16x16/actions/Makefile +data/icons/16x16/status/Makefile data/icons/22x22/Makefile data/icons/22x22/actions/Makefile +data/icons/22x22/status/Makefile data/icons/24x24/Makefile data/icons/24x24/actions/Makefile +data/icons/24x24/status/Makefile data/icons/32x32/Makefile data/icons/32x32/actions/Makefile +data/icons/32x32/status/Makefile data/icons/scalable/Makefile data/icons/scalable/actions/Makefile +data/icons/scalable/status/Makefile po/Makefile.in ]) diff --git a/data/icons/16x16/Makefile.am b/data/icons/16x16/Makefile.am index 0224d45..c163076 100644 --- a/data/icons/16x16/Makefile.am +++ b/data/icons/16x16/Makefile.am @@ -1 +1 @@ -SUBDIRS = actions +SUBDIRS = actions status diff --git a/data/icons/16x16/status/Makefile.am b/data/icons/16x16/status/Makefile.am new file mode 100644 index 0000000..c0af60e --- /dev/null +++ b/data/icons/16x16/status/Makefile.am @@ -0,0 +1,7 @@ + +iconsdir = $(INDICATORICONSDIR)/hicolor/16x16/status + +icons_DATA = \ + account-logged-in.png + +EXTRA_DIST = $(icons_DATA) diff --git a/data/icons/16x16/status/account-logged-in.png b/data/icons/16x16/status/account-logged-in.png Binary files differnew file mode 100644 index 0000000..fb4362c --- /dev/null +++ b/data/icons/16x16/status/account-logged-in.png diff --git a/data/icons/22x22/Makefile.am b/data/icons/22x22/Makefile.am index 0224d45..c163076 100644 --- a/data/icons/22x22/Makefile.am +++ b/data/icons/22x22/Makefile.am @@ -1 +1 @@ -SUBDIRS = actions +SUBDIRS = actions status diff --git a/data/icons/22x22/status/Makefile.am b/data/icons/22x22/status/Makefile.am new file mode 100644 index 0000000..1ce0fa1 --- /dev/null +++ b/data/icons/22x22/status/Makefile.am @@ -0,0 +1,7 @@ + +iconsdir = $(INDICATORICONSDIR)/hicolor/22x22/status + +icons_DATA = \ + account-logged-in.png + +EXTRA_DIST = $(icons_DATA) diff --git a/data/icons/22x22/status/account-logged-in.png b/data/icons/22x22/status/account-logged-in.png Binary files differnew file mode 100644 index 0000000..e27d75f --- /dev/null +++ b/data/icons/22x22/status/account-logged-in.png diff --git a/data/icons/24x24/Makefile.am b/data/icons/24x24/Makefile.am index 0224d45..c163076 100644 --- a/data/icons/24x24/Makefile.am +++ b/data/icons/24x24/Makefile.am @@ -1 +1 @@ -SUBDIRS = actions +SUBDIRS = actions status diff --git a/data/icons/24x24/status/Makefile.am b/data/icons/24x24/status/Makefile.am new file mode 100644 index 0000000..4fa065a --- /dev/null +++ b/data/icons/24x24/status/Makefile.am @@ -0,0 +1,7 @@ + +iconsdir = $(INDICATORICONSDIR)/hicolor/24x24/status + +icons_DATA = \ + account-logged-in.png + +EXTRA_DIST = $(icons_DATA) diff --git a/data/icons/24x24/status/account-logged-in.png b/data/icons/24x24/status/account-logged-in.png Binary files differnew file mode 100644 index 0000000..db4f548 --- /dev/null +++ b/data/icons/24x24/status/account-logged-in.png diff --git a/data/icons/32x32/Makefile.am b/data/icons/32x32/Makefile.am index 0224d45..c163076 100644 --- a/data/icons/32x32/Makefile.am +++ b/data/icons/32x32/Makefile.am @@ -1 +1 @@ -SUBDIRS = actions +SUBDIRS = actions status diff --git a/data/icons/32x32/status/Makefile.am b/data/icons/32x32/status/Makefile.am new file mode 100644 index 0000000..b852725 --- /dev/null +++ b/data/icons/32x32/status/Makefile.am @@ -0,0 +1,7 @@ + +iconsdir = $(INDICATORICONSDIR)/hicolor/32x32/status + +icons_DATA = \ + account-logged-in.png + +EXTRA_DIST = $(icons_DATA) diff --git a/data/icons/32x32/status/account-logged-in.png b/data/icons/32x32/status/account-logged-in.png Binary files differnew file mode 100644 index 0000000..05bff57 --- /dev/null +++ b/data/icons/32x32/status/account-logged-in.png diff --git a/data/icons/scalable/Makefile.am b/data/icons/scalable/Makefile.am index 0224d45..c163076 100644 --- a/data/icons/scalable/Makefile.am +++ b/data/icons/scalable/Makefile.am @@ -1 +1 @@ -SUBDIRS = actions +SUBDIRS = actions status diff --git a/data/icons/scalable/status/Makefile.am b/data/icons/scalable/status/Makefile.am new file mode 100644 index 0000000..cb006e2 --- /dev/null +++ b/data/icons/scalable/status/Makefile.am @@ -0,0 +1,7 @@ + +iconsdir = $(INDICATORICONSDIR)/hicolor/scalable/status + +icons_DATA = \ + account-logged-in.svg + +EXTRA_DIST = $(icons_DATA) diff --git a/data/icons/scalable/status/account-logged-in.svg b/data/icons/scalable/status/account-logged-in.svg new file mode 100644 index 0000000..c3ef44f --- /dev/null +++ b/data/icons/scalable/status/account-logged-in.svg @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg1" + sodipodi:version="0.32" + inkscape:version="0.45" + width="48" + height="48" + sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/emblems" + sodipodi:docname="emblem-default.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + version="1.0"> + <defs + id="defs3"> + <linearGradient + id="linearGradient5237"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5239" /> + <stop + id="stop5247" + offset="0.5" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + style="stop-color:#9c9c9c;stop-opacity:1" + offset="1" + id="stop5241" /> + </linearGradient> + <linearGradient + id="linearGradient5226"> + <stop + style="stop-color:#63b512;stop-opacity:1;" + offset="0" + id="stop5229" /> + <stop + id="stop5245" + offset="0.16030352" + style="stop-color:#58a30e;stop-opacity:1;" /> + <stop + id="stop5235" + offset="0.66008514" + style="stop-color:#366b04;stop-opacity:1" /> + <stop + style="stop-color:#87ea25;stop-opacity:1" + offset="1" + id="stop5231" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5300"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5302" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5304" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5224"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop5226" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop5228" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5224" + id="radialGradient5230" + cx="14.5" + cy="26.6875" + fx="14.5" + fy="26.6875" + r="10" + gradientTransform="matrix(1,0,0,0.29375,0,18.848047)" + gradientUnits="userSpaceOnUse" /> + <filter + inkscape:collect="always" + id="filter5296" + x="-0.09814655" + width="1.1962931" + y="-0.33411592" + height="1.6682318"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.81788793" + id="feGaussianBlur5298" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5300" + id="radialGradient5306" + cx="29.77438" + cy="7.0922189" + fx="29.77438" + fy="7.0922189" + r="25.380436" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5224" + id="radialGradient5330" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.29375,0,18.848047)" + cx="14.5" + cy="26.6875" + fx="14.5" + fy="26.6875" + r="10" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5226" + id="radialGradient5233" + cx="29.392656" + cy="18.898249" + fx="29.392656" + fy="18.898249" + r="29.699959" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5237" + id="radialGradient5243" + cx="22.9375" + cy="16.305218" + fx="22.9375" + fy="16.305218" + r="15.5625" + gradientTransform="matrix(1.5301205,0,0,1.6745294,-12.159639,-11.709817)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#ededed" + borderopacity="1" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="39.269655" + inkscape:cy="17.441445" + inkscape:window-width="826" + inkscape:window-height="790" + gridspacingx="0.50000000mm" + gridspacingy="0.50000000mm" + showgrid="false" + inkscape:grid-bbox="false" + inkscape:window-x="461" + inkscape:window-y="278" + inkscape:current-layer="svg1" + borderlayer="true" + inkscape:showpageshadow="false" + width="744.09449px" + height="1052.3622px"> + <inkscape:grid + type="xygrid" + id="grid5308" /> + </sodipodi:namedview> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Emblem Urgent</dc:title> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:contributor> + <cc:Agent> + <dc:title>Andreas Nilsson</dc:title> + </cc:Agent> + </dc:contributor> + <cc:license + rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" /> + <dc:subject> + <rdf:Bag> + <rdf:li>generic</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/GPL/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/SourceCode" /> + </cc:License> + </rdf:RDF> + </metadata> + <path + sodipodi:type="arc" + style="opacity:0.53012048;color:#000000;fill:url(#radialGradient5230);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296);enable-background:accumulate" + id="path4645" + sodipodi:cx="14.5" + sodipodi:cy="26.6875" + sodipodi:rx="10" + sodipodi:ry="2.9375" + d="M 24.5,26.6875 A 10,2.9375 0 1 1 4.5,26.6875 A 10,2.9375 0 1 1 24.5,26.6875 z" + transform="matrix(2.1570145,0,0,2.155398,-7.8468552,-16.33814)" /> + <path + transform="matrix(1.3478975,0,0,1.3468874,3.8853414,6.4889877)" + d="M 24.5,26.6875 A 10,2.9375 0 1 1 4.5,26.6875 A 10,2.9375 0 1 1 24.5,26.6875 z" + sodipodi:ry="2.9375" + sodipodi:rx="10" + sodipodi:cy="26.6875" + sodipodi:cx="14.5" + id="path5328" + style="opacity:0.80120482;color:#000000;fill:url(#radialGradient5330);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296);enable-background:accumulate" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:url(#radialGradient5233);fill-opacity:1;fill-rule:evenodd;stroke:#316203;stroke-width:1.37804781999999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path907" + sodipodi:cx="29.392656" + sodipodi:cy="29.207693" + sodipodi:rx="29.010935" + sodipodi:ry="29.010935" + d="M 58.403591,29.207693 A 29.010935,29.010935 0 1 1 0.3817215,29.207693 A 29.010935,29.010935 0 1 1 58.403591,29.207693 z" + transform="matrix(0.7238447,0,0,0.7274883,2.1828126,2.3568607)" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5306);stroke-width:1.21160841;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path1552" + sodipodi:cx="29.77438" + sodipodi:cy="30.352861" + sodipodi:rx="24.175779" + sodipodi:ry="24.175779" + d="M 53.950159,30.352861 A 24.175779,24.175779 0 1 1 5.5986004,30.352861 A 24.175779,24.175779 0 1 1 53.950159,30.352861 z" + transform="matrix(0.8254302,0,0,0.8252681,-1.1457884,-1.4441229)" /> + <path + style="opacity:1;color:#000000;fill:url(#radialGradient5243);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 12.875,24.625 L 25.375,36.625 L 44,20.625 C 43.253602,16.729371 41.57038,13.679873 39.8125,11.0625 L 25.125,23.75 L 20.375,18.5 L 12.875,24.625 z" + id="path5222" + sodipodi:nodetypes="ccccccc" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#549910;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 40.21875,10.8125 C 41.930961,13.346411 43.59334,15.979986 44.40625,20.3125" + id="path5224" + sodipodi:nodetypes="cc" /> +</svg> diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h index 1fd256f..253cba8 100644 --- a/src/dbus-shared-names.h +++ b/src/dbus-shared-names.h @@ -38,4 +38,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #define INDICATOR_SESSION_DBUS_OBJECT "/org/ayatana/indicator/session/menu" #define INDICATOR_SESSION_DBUS_VERSION 0 +#define USER_ITEM_TYPE "x-canonical-user-item" +#define USER_ITEM_PROP_NAME "user-item-name" +#define USER_ITEM_PROP_LOGGED_IN "user-item-logged-in" + #endif /* __DBUS_SHARED_NAMES_H__ */ diff --git a/src/indicator-session.c b/src/indicator-session.c index 1b9629b..ee7d76c 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -106,6 +106,7 @@ indicator_session_init (IndicatorSession *self) DbusmenuClient * client = DBUSMENU_CLIENT(dbusmenu_gtkmenu_get_client(self->menu)); dbusmenu_client_add_type_handler(client, MENU_SWITCH_TYPE, build_menu_switch); + dbusmenu_client_add_type_handler(client, USER_ITEM_TYPE, new_user_item); return; } @@ -145,6 +146,35 @@ get_icon (IndicatorObject * io) return INDICATOR_SESSION(io)->status_image; } +/* Builds an item with a hip little logged in icon. */ +static gboolean +new_user_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) +{ + GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + GtkWidget * hbox = gtk_hbox_new(FALSE, 0); + + GtkWidget * label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, USER_ITEM_PROP_NAME)); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + + GtkWidget * icon = gtk_image_new_from_icon_name("account-logged-in", GTK_ICON_SIZE_MENU); + gtk_misc_set_alignment(GTK_MISC(icon), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 0); + if (dbusmenu_menuitem_property_get_bool(newitem, USER_ITEM_PROP_LOGGED_IN)) { + gtk_widget_show(icon); + } else { + gtk_widget_hide(icon); + } + + gtk_container_add(GTK_CONTAINER(gmi), hbox); + gtk_widget_show(hbox); + + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + + return TRUE; +} + /* Indicator based function to get the menu for the whole applet. This starts up asking for the parts of the menu from the various services. */ diff --git a/src/session-service.c b/src/session-service.c index d074cb8..9fb9ee7 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -445,7 +445,9 @@ rebuild_items (DbusmenuMenuitem *root, if (check_guest_session ()) { mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Guest Session")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE); + dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, _("Guest Session")); + dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, FALSE); dbusmenu_menuitem_child_append (root, mi); g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_guest_session), NULL); } @@ -495,7 +497,9 @@ rebuild_items (DbusmenuMenuitem *root, user->service = service; mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, user->real_name); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE); + dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, user->real_name); + dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, user->sessions != NULL); dbusmenu_menuitem_child_append (root, mi); g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_user_session), user); } |