New customization options for secondary menu

For #83 and #93
This commit is contained in:
jderose9
2017-03-24 22:31:43 -04:00
parent 7d68a21995
commit 1411ebc9ec
8 changed files with 326 additions and 83 deletions

View File

@@ -247,6 +247,123 @@
</packing>
</child>
</object>
<object class="GtkBox" id="box_secondarymenu_options">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame_secondarymenu_options">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkListBox" id="listbox_secondarymenu_options">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="selection_mode">none</property>
<child>
<object class="GtkListBoxRow" id="listboxrow_secondarymenu_appmenu">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkGrid" id="grid_secondarymenu_appmenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin_left">12</property>
<property name="margin_right">12</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="column_spacing">32</property>
<child>
<object class="GtkLabel" id="secondarymenu_appmenu_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Integrate &lt;i&gt;AppMenu&lt;/i&gt; items</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="secondarymenu_appmenu_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="listboxrow_secondarymenu_showdetails">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkGrid" id="grid_secondarymenu_showdetails">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin_left">12</property>
<property name="margin_right">12</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="column_spacing">32</property>
<child>
<object class="GtkLabel" id="secondarymenu_showdetails_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">&lt;i&gt;Show Details&lt;/i&gt; menu item</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="secondarymenu_showdetails_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<object class="GtkAdjustment" id="dot_border_width_adjustment">
<property name="upper">10</property>
<property name="step_increment">1</property>
@@ -1843,7 +1960,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Show Activities Button</property>
<property name="label" translatable="yes">Show &lt;i&gt;Activities&lt;/i&gt; button</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
@@ -1887,7 +2004,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Show Desktop Button</property>
<property name="label" translatable="yes">Show &lt;i&gt;Desktop&lt;/i&gt; button</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
@@ -1932,7 +2049,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Show AppMenu</property>
<property name="label" translatable="yes">Show &lt;i&gt;AppMenu&lt;/i&gt; button</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
@@ -2359,8 +2476,6 @@
<property name="can_focus">False</property>
<property name="margin_left">24</property>
<property name="margin_right">24</property>
<property name="margin_top">24</property>
<property name="margin_bottom">24</property>
<property name="orientation">vertical</property>
<property name="spacing">24</property>
<child>
@@ -2681,6 +2796,80 @@
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="drillins_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkListBox" id="listbox5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="selection_mode">none</property>
<child>
<object class="GtkListBoxRow" id="listboxrow6">
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkGrid" id="content_size_grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">12</property>
<property name="margin_right">12</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="row_spacing">20</property>
<property name="column_spacing">32</property>
<child>
<object class="GtkLabel" id="secondarymenu_options_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">App icon secondary (right-click) menu</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="secondarymenu_options_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="valign">center</property>
<child>
<object class="GtkImage" id="secondarymenu_options_button_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">emblem-system-symbolic</property>
</object>
</child>
<style>
<class name="circular"/>
</style>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
@@ -2688,7 +2877,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>
@@ -2702,7 +2891,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
</object>
@@ -2714,6 +2903,7 @@
<object class="GtkLabel" id="finetune_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Fine-Tune</property>
</object>
<packing>

View File

@@ -912,75 +912,79 @@ const taskbarSecondaryMenu = new Lang.Class({
this.parent();
// Remove "Show Details" menu item
let existingMenuItems = this._getMenuItems();
for(let idx in existingMenuItems) {
if(existingMenuItems[idx].actor.label_actor.text == _("Show Details")) {
this.box.remove_child(existingMenuItems[idx].actor);
if(existingMenuItems[idx-1] instanceof PopupMenu.PopupSeparatorMenuItem)
this.box.remove_child(existingMenuItems[idx-1].actor);
break;
if(!this._dtpSettings.get_boolean('secondarymenu-contains-showdetails')) {
let existingMenuItems = this._getMenuItems();
for(let idx in existingMenuItems) {
if(existingMenuItems[idx].actor.label_actor.text == _("Show Details")) {
this.box.remove_child(existingMenuItems[idx].actor);
if(existingMenuItems[idx-1] instanceof PopupMenu.PopupSeparatorMenuItem)
this.box.remove_child(existingMenuItems[idx-1].actor);
break;
}
}
}
// prepend items from the appMenu (for native gnome apps)
let appMenu = this._source.app.menu;
if(appMenu) {
let remoteMenu = new RemoteMenu.RemoteMenu(this._source.actor, this._source.app.menu, this._source.app.action_group);
let appMenuItems = remoteMenu._getMenuItems();
let itemPosition = 0;
for(let appMenuIdx in appMenuItems){
let menuItem = appMenuItems[appMenuIdx];
let labelText = menuItem.actor.label_actor.text;
if(labelText == _("New Window") || labelText == _("Quit"))
continue;
if(this._dtpSettings.get_boolean('secondarymenu-contains-appmenu')) {
let appMenu = this._source.app.menu;
if(appMenu) {
let remoteMenu = new RemoteMenu.RemoteMenu(this._source.actor, this._source.app.menu, this._source.app.action_group);
let appMenuItems = remoteMenu._getMenuItems();
let itemPosition = 0;
for(let appMenuIdx in appMenuItems){
let menuItem = appMenuItems[appMenuIdx];
let labelText = menuItem.actor.label_actor.text;
if(labelText == _("New Window") || labelText == _("Quit"))
continue;
if(menuItem instanceof PopupMenu.PopupSeparatorMenuItem)
continue;
// this ends up getting called multiple times, and bombing due to the signal id's being invalid
// on a 2nd pass. disconnect the base handler and attach our own that wraps the id's in if statements
menuItem.disconnect(menuItem._popupMenuDestroyId)
menuItem._popupMenuDestroyId = menuItem.connect('destroy', Lang.bind(this, function(menuItem) {
if(menuItem._popupMenuDestroyId) {
menuItem.disconnect(menuItem._popupMenuDestroyId);
menuItem._popupMenuDestroyId = 0;
}
if(menuItem._activateId) {
menuItem.disconnect(menuItem._activateId);
menuItem._activateId = 0;
}
if(menuItem._activeChangeId) {
menuItem.disconnect(menuItem._activeChangeId);
menuItem._activeChangeId = 0;
}
if(menuItem._sensitiveChangeId) {
menuItem.disconnect(menuItem._sensitiveChangeId);
menuItem._sensitiveChangeId = 0;
}
this.disconnect(menuItem._parentSensitiveChangeId);
if (menuItem == this._activeMenuItem)
this._activeMenuItem = null;
}));
menuItem.actor.get_parent().remove_child(menuItem.actor);
if(menuItem instanceof PopupMenu.PopupSubMenuMenuItem) {
let newSubMenuMenuItem = new PopupMenu.PopupSubMenuMenuItem(labelText);
let appSubMenuItems = menuItem.menu._getMenuItems();
for(let appSubMenuIdx in appSubMenuItems){
let subMenuItem = appSubMenuItems[appSubMenuIdx];
subMenuItem.actor.get_parent().remove_child(subMenuItem.actor);
newSubMenuMenuItem.menu.addMenuItem(subMenuItem);
}
this.addMenuItem(newSubMenuMenuItem, itemPosition);
} else
this.addMenuItem(menuItem, itemPosition);
itemPosition++;
}
if(menuItem instanceof PopupMenu.PopupSeparatorMenuItem)
continue;
// this ends up getting called multiple times, and bombing due to the signal id's being invalid
// on a 2nd pass. disconnect the base handler and attach our own that wraps the id's in if statements
menuItem.disconnect(menuItem._popupMenuDestroyId)
menuItem._popupMenuDestroyId = menuItem.connect('destroy', Lang.bind(this, function(menuItem) {
if(menuItem._popupMenuDestroyId) {
menuItem.disconnect(menuItem._popupMenuDestroyId);
menuItem._popupMenuDestroyId = 0;
}
if(menuItem._activateId) {
menuItem.disconnect(menuItem._activateId);
menuItem._activateId = 0;
}
if(menuItem._activeChangeId) {
menuItem.disconnect(menuItem._activeChangeId);
menuItem._activeChangeId = 0;
}
if(menuItem._sensitiveChangeId) {
menuItem.disconnect(menuItem._sensitiveChangeId);
menuItem._sensitiveChangeId = 0;
}
this.disconnect(menuItem._parentSensitiveChangeId);
if (menuItem == this._activeMenuItem)
this._activeMenuItem = null;
}));
menuItem.actor.get_parent().remove_child(menuItem.actor);
if(menuItem instanceof PopupMenu.PopupSubMenuMenuItem) {
let newSubMenuMenuItem = new PopupMenu.PopupSubMenuMenuItem(labelText);
let appSubMenuItems = menuItem.menu._getMenuItems();
for(let appSubMenuIdx in appSubMenuItems){
let subMenuItem = appSubMenuItems[appSubMenuIdx];
subMenuItem.actor.get_parent().remove_child(subMenuItem.actor);
newSubMenuMenuItem.menu.addMenuItem(subMenuItem);
}
this.addMenuItem(newSubMenuMenuItem, itemPosition);
} else
this.addMenuItem(menuItem, itemPosition);
itemPosition++;
}
if(itemPosition > 0) {
let separator = new PopupMenu.PopupSeparatorMenuItem();
this.addMenuItem(separator, itemPosition);
if(itemPosition > 0) {
let separator = new PopupMenu.PopupSeparatorMenuItem();
this.addMenuItem(separator, itemPosition);
}
}
}

View File

@@ -144,11 +144,11 @@ msgid "Animate <i>Show Applications</i>."
msgstr "Animovat <i>zobrazení aplikací</i>."
#: Settings.ui.h:27
msgid "Show Activities Button"
msgid "Show <i>Activities</i> button"
msgstr "Zobrazit tlačítko aktivit"
#: Settings.ui.h:28
msgid "Show AppMenu"
msgid "Show <i>AppMenu</i> button"
msgstr "Zobrazit menu aplikací"
#: Settings.ui.h:29

View File

@@ -312,15 +312,15 @@ msgid "Animate <i>Show Applications</i>."
msgstr "Animar <i>Mostrar aplicaciones</i>"
#: Settings.ui.h:58
msgid "Show Activities Button"
msgid "Show <i>Activities</i> button"
msgstr "Mostrar el botón de Actividades"
#: Settings.ui.h:59
msgid "Show Desktop Button"
msgid "Show <i>Desktop</i> button"
msgstr "Mostrar el botón de Escritorio"
#: Settings.ui.h:60
msgid "Show AppMenu"
msgid "Show <i>AppMenu</i> button"
msgstr "Mostrar el botón de aplicación"
#: Settings.ui.h:61

View File

@@ -306,15 +306,15 @@ msgid "Animate <i>Show Applications</i>."
msgstr "Animer <i>Afficher les applications</i>"
#: Settings.ui.h:58
msgid "Show Activities Button"
msgid "Show <i>Activities</i> button"
msgstr "Afficher le bouton des activités"
#: Settings.ui.h:59
msgid "Show Desktop Button"
msgid "Show <i>Desktop</i> button"
msgstr "Afficher le bouton d'affichage du bureau"
#: Settings.ui.h:60
msgid "Show AppMenu"
msgid "Show <i>AppMenu</i> button"
msgstr "Afficher le menu de l'application"
#: Settings.ui.h:61

View File

@@ -1,7 +1,7 @@
# Dash to panel.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FÃbio Nogueira <fnogueira@gnome.org>, 2017
# F<EFBFBD>bio Nogueira <fnogueira@gnome.org>, 2017
#
msgid ""
msgstr ""
@@ -146,11 +146,11 @@ msgid "Animate <i>Show Applications</i>."
msgstr "<i>Mostrar aplicativos</i> animado."
#: Settings.ui.h:27
msgid "Show Activities Button"
msgid "Show <i>Activities</i> button"
msgstr "Mostrar botão de atividades"
#: Settings.ui.h:28
msgid "Show AppMenu"
msgid "Show <i>AppMenu</i> button"
msgstr "Mostrar Menu de aplicativos"
#: Settings.ui.h:29

View File

@@ -497,7 +497,48 @@ const Settings = new Lang.Class({
dialog.show_all();
}));
// setup dialog for secondary menu options
this._builder.get_object('secondarymenu_options_button').connect('clicked', Lang.bind(this, function() {
let dialog = new Gtk.Dialog({ title: _('Secondary Menu Options'),
transient_for: this.widget.get_toplevel(),
use_header_bar: true,
modal: true });
// GTK+ leaves positive values for application-defined response ids.
// Use +1 for the reset action
dialog.add_button(_('Reset to defaults'), 1);
let box = this._builder.get_object('box_secondarymenu_options');
dialog.get_content_area().add(box);
this._settings.bind('secondarymenu-contains-appmenu',
this._builder.get_object('secondarymenu_appmenu_switch'),
'active',
Gio.SettingsBindFlags.DEFAULT);
this._settings.bind('secondarymenu-contains-showdetails',
this._builder.get_object('secondarymenu_showdetails_switch'),
'active',
Gio.SettingsBindFlags.DEFAULT);
dialog.connect('response', Lang.bind(this, function(dialog, id) {
if (id == 1) {
// restore default settings
this._settings.set_value('secondarymenu-contains-appmenu', this._settings.get_default_value('secondarymenu-contains-appmenu'));
this._settings.set_value('secondarymenu-contains-showdetails', this._settings.get_default_value('secondarymenu-contains-showdetails'));
} else {
// remove the settings box so it doesn't get destroyed;
dialog.get_content_area().remove(box);
dialog.destroy();
}
return;
}));
dialog.show_all();
}));
// setup dialog for advanced options
this._builder.get_object('button_advanced_options').connect('clicked', Lang.bind(this, function() {

View File

@@ -149,7 +149,7 @@
</key>
<key type="b" name="show-appmenu">
<default>false</default>
<summary>Show appMenu</summary>
<summary>Show appMenu button</summary>
<description>Show appMenu on the right hand side of the panel</description>
</key>
<key type="b" name="show-window-previews">
@@ -243,6 +243,14 @@
<default>true</default>
<summary>Animate when new window launched</summary>
</key>
<key type="b" name="secondarymenu-contains-appmenu">
<default>true</default>
<summary>Integrate items from the gnome appmenu into the right click menu</summary>
</key>
<key type="b" name="secondarymenu-contains-showdetails">
<default>false</default>
<summary>Display Show Details to open Gnome Software from right click menu</summary>
</key>
<key type="s" name="shortcut-text">
<default>"&lt;Super&gt;q"</default>
<summary>Keybinding to show the dock and the number overlay.</summary>