disclaimer: Eu sou autor deste indicador e está escrito para esta pergunta específica
Introdução
O Ubuntu, por padrão, não tem a opção de mover o ícone "Show Desktop" - ele precisa estar no inicializador. Você também pode exibi-lo no menu Alt + Tab. No entanto, é possível criar um pequeno miniaplicativo de indicadores, que ficará no seu painel superior, o que se aproxima muito da sua necessidade de colocar o ícone no canto da tela. Esta resposta fornece exatamente isso
Uso
O uso é muito simples. Salve o código na sua pasta ~/bin
, por exemplo, para mim, seria /home/serg/bin/show_desktop_indicator
. Para torná-lo aberto sempre que você fizer login no seu Ubuntu, procure em Dash por "Startup Applications", abra o aplicativo e adicione o caminho completo ao indicador como novo comando.
Você também pode fazer o download da pasta zip com o indicador da página do Github do projeto
Essencialmente, minimiza todas as janelas abertas. Há duas maneiras de fazer isso. Um, você pode clicar no ícone do indicador e clicar na entrada de menu "Mostrar área de trabalho" ou usar o clique do meio do mouse no próprio ícone.
Código
Também disponível em Github
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Author: Serg Kolo , contact: [email protected]
# Date: November 5th, 2016
# Purpose: appindicator for minimizing all windows
# Written for: http://askubuntu.com/q/846067/295286
# Tested on: Ubuntu 16.04 LTS
#
#
# Licensed under The MIT License (MIT).
# See included LICENSE file or the notice below.
#
# Copyright © 2016 Sergiy Kolodyazhnyy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import gi
gi.require_version('AppIndicator3', '0.1')
gi.require_version('Notify', '0.7')
from gi.repository import GLib as glib
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Gtk as gtk
from gi.repository import Gdk
class ShowDesktop(object):
def __init__(self):
self.app = appindicator.Indicator.new(
'files-indicator', "user-desktop",
appindicator.IndicatorCategory.OTHER
)
self.app.set_status(appindicator.IndicatorStatus.ACTIVE)
self.make_menu()
def add_menu_item(self, menu_obj, item_type, image, label, action, args):
""" dynamic function that can add menu items depending on
the item type and other arguments"""
menu_item, icon = None, None
if item_type is gtk.ImageMenuItem and label:
menu_item = gtk.ImageMenuItem.new_with_label(label)
menu_item.set_always_show_image(True)
if '/' in image:
icon = gtk.Image.new_from_file(image)
else:
icon = gtk.Image.new_from_icon_name(image, 48)
menu_item.set_image(icon)
elif item_type is gtk.ImageMenuItem and not label:
menu_item = gtk.ImageMenuItem()
menu_item.set_always_show_image(True)
if '/' in image:
icon = gtk.Image.new_from_file(image)
else:
icon = gtk.Image.new_from_icon_name(image, 16)
menu_item.set_image(icon)
elif item_type is gtk.MenuItem:
menu_item = gtk.MenuItem(label)
elif item_type is gtk.SeparatorMenuItem:
menu_item = gtk.SeparatorMenuItem()
if action:
menu_item.connect('activate', action, *args)
menu_obj.append(menu_item)
menu_item.show()
def make_menu(self):
self.app_menu = gtk.Menu()
content = [self.app_menu,gtk.MenuItem,
None,'Show Desktop',
self.show_desktop,[None]
]
self.add_menu_item(*content)
last = None
for i in self.app_menu.get_children():
last = i
self.app.set_secondary_activate_target(last)
content = [self.app_menu,gtk.ImageMenuItem,
'exit','Quit',
self.quit,[None]
]
self.add_menu_item(*content)
self.app.set_menu(self.app_menu)
def show_desktop(self,*args):
screen = Gdk.Screen.get_default()
for w in screen.get_window_stack():
w.iconify()
w.process_all_updates()
def run(self):
""" Launches the indicator """
try:
gtk.main()
except KeyboardInterrupt:
pass
def quit(self, *args):
""" closes indicator """
gtk.main_quit()
def main():
""" defines program entry point """
indicator = ShowDesktop()
indicator.run()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
gtk.main_quit()
Indicador em ação:
Tema de ícones do Ubuntu com o Kylin: