xapp-2.8.8/0000775000175000017500000000000014736763051011441 5ustar fabiofabioxapp-2.8.8/schemas/0000775000175000017500000000000014736763051013064 5ustar fabiofabioxapp-2.8.8/schemas/meson.build0000664000175000017500000000025114736763051015224 0ustar fabiofabioinstall_data('org.x.apps.gschema.xml', install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas') ) meson.add_install_script('meson_install_schemas.py') xapp-2.8.8/schemas/org.x.apps.gschema.xml0000664000175000017500000001014314736763051017212 0ustar fabiofabio [] List of favorites, stored in display order, with the format of uri::mimetype [] List of gvfs metadata for the favorites:/// root (for remembering sort order in nemo, etc). ["onboard"] A list of appindicator-based apps where left-click should trigger the 'secondary activation' action, rather than open the menu. The name to be put here will be the icon's "Name" (not icon name). You can see what name to use by running xapp-sn-watcher from a terminal (or in .xsession-properties in some DEs). ["Cinnamon", "X-Cinnamon"] List of desktops to run the XApp StatusNotifierWatcher service on.. The name in the session's XDG_CURRENT_DESKTOP environment variable is checked against this list. If the name is here, the service is started to allow XApp status applets to support the StatusNotifer spec (this includes appindicator). false Print debug messages for the xapp-sn-watcher service "SnWatcher,StatusIcon" Debug flags for sn-watcher debugging ["qbittorrent"] Use the Title property in place of the Tooltip for programs with these IDs. true Whether to invite true StatusNotifierItem implementations to connect. StatusNotifierItem implementations (like kde's) check for StatusNotifierWather::IsStatusNotifierHostRegistered to be true before attempting to connect with us. Appindicator implementations only look to see if StatusNotifierWatcher is owned on the bus. Setting IsStatusNotifierHostRegistered to false effectively disabled StatusNotifier support while still handling appindicator icons. 8 Pixels smaller than the panel height to make symbolic icons 8 Pixels smaller than the panel height to make color icons 'default' Color scheme The preferred color scheme for the user interface. Valid values are “default”, “prefer-dark”, “prefer-light”. false Preferred contrast xapp-2.8.8/schemas/meson_install_schemas.py0000664000175000017500000000042614736763051020012 0ustar fabiofabio#!/usr/bin/python3 import os import subprocess schemadir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas') if not os.environ.get('DESTDIR'): print('Compiling gsettings schemas...') subprocess.call(['glib-compile-schemas', schemadir]) xapp-2.8.8/test-scripts/0000775000175000017500000000000014736763051014105 5ustar fabiofabioxapp-2.8.8/test-scripts/xapp-icon-chooser-dialog0000775000175000017500000000400614736763051020626 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('Gtk', '3.0') gi.require_version('XApp', '1.0') from gi.repository import Gtk, XApp, Gdk import argparse import signal signal.signal(signal.SIGINT, signal.SIG_DFL) if __name__ == '__main__': parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group() # if there are no arguments supplied, we should create a new launcher in the default location (usually ~/.local/share/applications/) group.add_argument('-c', '--category', dest='category', metavar='CATEGORY', help='The category to select when the dialog is opened.') group.add_argument('-i', '--icon-string', dest='icon', metavar='ICON_STRING', help='The icon to select when the dialog is opened. This can be an icon name or a path. ' 'If the icon doesn\'t exist, it will not cause an error, but there may not be an icon ' 'selected.') parser.add_argument('-b', '--clipboard', dest='clipboard', action='store_true', help='If this option is supplied, the result will be copied to the clipboard when an icon is ' 'selected and the dialog closed.') parser.add_argument('-p', '--disallow-paths', dest='paths', action='store_false', help='causes the path.') args = parser.parse_args() dialog = XApp.IconChooserDialog(allow_paths=args.paths, default_icon='folder') dialog.set_skip_taskbar_hint(False) if args.category: response = dialog.run_with_category(args.category) elif args.icon: response = dialog.run_with_icon(args.icon) else: response = dialog.run() if response == Gtk.ResponseType.OK: string = dialog.get_icon_string() print(string) if args.clipboard: clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text(string, -1) clipboard.store() else: print('Dialog canceled') xapp-2.8.8/test-scripts/xapp-kbd-layout-controller0000775000175000017500000001273514736763051021245 0ustar fabiofabio#! /usr/bin/python3 """ A demo/test script for the XAppKbdLayoutController class """ import sys, os import signal import gettext import gi gi.require_version('Gtk', '3.0') gi.require_version('XApp', '1.0') from gi.repository import Gtk, XApp, GObject import cairo signal.signal(signal.SIGINT, signal.SIG_DFL) class Main: def __init__(self): win = Gtk.Window() win.set_default_size(320, 200) frame = Gtk.Frame() frame.set_margin_start(2) frame.set_margin_end(2) frame.set_margin_top(2) frame.set_margin_bottom(2) win.add(frame) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) box.set_margin_start(2) box.set_margin_end(2) box.set_margin_top(2) box.set_margin_bottom(2) frame.add(box) self.use_caps = False self.controller = XApp.KbdLayoutController() self.controller.connect("layout-changed", self.on_layout_changed) self.controller.connect("config-changed", self.on_config_changed) self.label = Gtk.Label() self.label.set_text(self.controller.get_current_name()) box.pack_start(self.label, True, True, 4) hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) box.pack_start(hbox, True, True, 4) self.flag_button = Gtk.Button() hbox.pack_start(self.flag_button, True, True, 4) self.flag_button.connect("clicked", self.on_button_clicked) self.group_button = Gtk.Button() hbox.pack_start(self.group_button, True, True, 4) self.group_button.connect("clicked", self.on_button_clicked) self.variant_button = Gtk.Button() hbox.pack_start(self.variant_button, True, True, 4) self.variant_button.connect("clicked", self.on_button_clicked) check = Gtk.CheckButton.new_with_label("Use caps") check.connect("toggled", self.on_caps_toggled) box.pack_start(check, True, True, 4) frame.show_all() win.connect("delete-event", lambda w, e: Gtk.main_quit()) self.on_layout_changed(self.controller) win.present() Gtk.main() def on_caps_toggled(self, widget): self.use_caps = widget.get_active() self.on_layout_changed(self.controller) def on_button_clicked(self, widget, data=None): self.controller.next_group() def on_layout_changed(self, controller, group=None): handled = False name = self.controller.get_current_icon_name() if name != None: filename = "/usr/share/iso-flag-png/%s.png" % name if os.path.exists(filename): valid, width, height = Gtk.IconSize.lookup(Gtk.IconSize.LARGE_TOOLBAR) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) flag_surface = cairo.ImageSurface.create_from_png(filename) cr = cairo.Context(surface) cr.save() factor = width / flag_surface.get_width() true_width = flag_surface.get_width() * factor true_height = flag_surface.get_height() * factor x_offset = y_offset = 0 if flag_surface.get_width() >= flag_surface.get_height(): x_offset = 0 y_offset = ((height * (1 / factor)) - flag_surface.get_height()) / 2 else: x_offset = ((width * (1 / factor)) - flag_surface.get_width()) / 2 y_offset = 0 true_x_offset = (width - true_width) / 2; true_y_offset = (height - true_height) / 2; cr.scale(factor, factor); cr.set_source_surface(flag_surface, x_offset, y_offset); cr.get_source().set_filter(cairo.FILTER_BEST); cr.set_operator(cairo.OPERATOR_SOURCE); cr.paint(); cr.restore() XApp.KbdLayoutController.render_cairo_subscript(cr, true_x_offset + (true_width / 2), true_y_offset + (true_height / 2), true_width / 2, true_height / 2, self.controller.get_current_flag_id()) image = Gtk.Image.new_from_surface(cr.get_target()) self.flag_button.set_image(image) handled = True else: print("Missing /usr/share/iso-flag-png flag image - text only") if not handled: name = self.controller.get_current_short_group_label() if self.use_caps: self.flag_button.set_label(name.upper()) else: self.flag_button.set_label(name) self.flag_button.set_image(None) self.label.set_text(self.controller.get_current_name()) group_label = self.controller.get_current_short_group_label() variant_label = self.controller.get_current_variant_label() if self.use_caps: group_label = group_label.upper() variant_label = variant_label.upper() self.group_button.set_label(group_label) self.variant_button.set_label(variant_label) def on_config_changed(self, controller): GObject.idle_add(self.on_layout_changed, controller) if __name__ == "__main__": main = Main() xapp-2.8.8/test-scripts/xapp-status-applet0000775000175000017500000001546314736763051017620 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('Gtk', '3.0') gi.require_version('XApp', '1.0') from gi.repository import Gio, GLib, GObject, Gtk, XApp, Gdk import os import sys import json DBUS_NAME = "org.x.StatusIcon" DBUS_PATH = "/org/x/StatusIcon" class StatusWidget(Gtk.ToggleButton): __gsignals__ = { "re-sort": (GObject.SignalFlags.RUN_LAST, None, ()) } def __init__(self, icon): super(Gtk.ToggleButton, self).__init__() self.proxy = icon self.name = self.proxy.get_name() self.add_events(Gdk.EventMask.SCROLL_MASK) box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.image = Gtk.Image() self.label = Gtk.Label() box.pack_start(self.image, False, False, 6) box.add(self.label) self.add(box) flags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE self.image.props.icon_size = Gtk.IconSize.DIALOG self.set_icon(self.proxy.props.icon_name) self.show_all() self.proxy.bind_property("label", self.label, "label", flags) self.proxy.bind_property("tooltip-text", self, "tooltip-markup", flags) self.proxy.bind_property("visible", self, "visible", flags) self.proxy.bind_property("primary-menu-is-open", self, "active", flags) self.proxy.bind_property("secondary-menu-is-open", self, "active", flags) self.proxy.connect("notify::icon-name", self.on_icon_name_changed) self.proxy.connect("notify::name", self.on_name_changed) self.connect("button-press-event", self.on_button_press) self.connect("button-release-event", self.on_button_release) self.connect("scroll-event", self.on_scroll) def on_icon_name_changed(self, proxy, gparamspec, data=None): string = self.proxy.props.icon_name self.set_icon(string) def on_name_changed(self, proxy, gparamspec, data=None): self.emit("re-sort") def set_icon(self, string): if string: if string and os.path.exists(string): self.image.set_from_file(string) else: self.image.set_from_icon_name(string, Gtk.IconSize.DIALOG) else: self.image.set_from_icon_name("image-missing", Gtk.IconSize.DIALOG) def on_button_press(self, widget, event): # We're simulating a top panel here alloc = widget.get_allocation() ignore, x, y = widget.get_window().get_origin() x += alloc.x y += alloc.y + alloc.height time = event.time print ("Button press : %d:%d" % (x, y)) self.proxy.call_button_press_sync(x, y, event.button, event.time, Gtk.PositionType.TOP, None) def on_button_release(self, widget, event): # We're simulating a top panel here alloc = widget.get_allocation() ignore, x, y = widget.get_window().get_origin() x += alloc.x y += alloc.y + alloc.height time = event.time print ("Button release : %d:%d" % (x, y)) self.proxy.call_button_release_sync(x, y, event.button, event.time, Gtk.PositionType.TOP, None) def on_scroll(self, widget, event): has, direction = event.get_scroll_direction() x_dir = XApp.ScrollDirection.UP delta = 0 if direction != Gdk.ScrollDirection.SMOOTH: x_dir = XApp.ScrollDirection(int(direction)) if direction == Gdk.ScrollDirection.UP: delta = -1 elif direction == Gdk.ScrollDirection.DOWN: delta = 1 elif direction == Gdk.ScrollDirection.LEFT: delta = -1 elif direction == Gdk.ScrollDirection.RIGHT: delta = 1 print ("Scroll : delta: %d, orientation: %d" % (delta, x_dir)) self.proxy.call_scroll_sync(delta, x_dir, event.time, None) class StatusApplet(GObject.Object): def __init__(self): super(StatusApplet, self).__init__() self.window = Gtk.Window() self.window.set_accept_focus (False) self.window.connect("destroy", self.on_window_destroy) self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin=6, spacing=6) self.window.add(self.main_box) self.disco_button = Gtk.Button() self.main_box.pack_start(self.disco_button, False, False, 0) self.disco_button.connect("clicked", self.on_disco_button_clicked) self.indicator_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) self.main_box.pack_start(self.indicator_box, False, False, 0) self.indicators = {} self.monitor = None self.setup_monitor() self.window.show_all() def on_window_destroy(self, widget, data=None): self.destroy_monitor() Gtk.main_quit() def on_disco_button_clicked(self, widget, data=None): if self.monitor == None: self.setup_monitor () else: self.destroy_monitor() def setup_monitor (self): self.monitor = XApp.StatusIconMonitor() self.monitor.connect("icon-added", self.on_icon_added) self.monitor.connect("icon-removed", self.on_icon_removed) self.disco_button.set_label("Disconnect monitor") def destroy_monitor (self): for key in self.indicators.keys(): self.indicator_box.remove(self.indicators[key]) self.monitor = None self.indicators = {} self.disco_button.set_label("Connect monitor") def on_icon_added(self, monitor, proxy): name = proxy.get_name() + proxy.get_object_path() self.indicators[name] = StatusWidget(proxy) self.indicator_box.add(self.indicators[name]) self.indicators[name].connect("re-sort", self.sort_icons) self.sort_icons() def on_icon_removed(self, monitor, proxy): name = proxy.get_name() + proxy.get_object_path() self.indicator_box.remove(self.indicators[name]) self.indicators[name].disconnect_by_func(self.sort_icons) del(self.indicators[name]) self.sort_icons() def sort_icons(self, status_icon=None): icon_list = list(self.indicators.values()) # for i in icon_list: # print("before: ", i.proxy.props.icon_name, i.proxy.props.name.lower()) icon_list.sort(key=lambda icon: icon.proxy.props.name.replace("org.x.StatusIcon.", "").lower()) icon_list.sort(key=lambda icon: icon.proxy.props.icon_name.lower().endswith("symbolic")) # for i in icon_list: # print("after: ", i.proxy.props.icon_name, i.proxy.props.name.lower()) icon_list.reverse() for icon in icon_list: self.indicator_box.reorder_child(icon, 0) if __name__ == '__main__': applet = StatusApplet() Gtk.main() sys.exit(0)xapp-2.8.8/test-scripts/xapp-favorites0000775000175000017500000001166714736763051017016 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('Gtk', '3.0') gi.require_version('XApp', '1.0') from gi.repository import Gio, GLib, GObject, Gtk, XApp, Pango import sys import signal signal.signal(signal.SIGINT, signal.SIG_DFL) DBUS_NAME = "org.x.StatusIcon" DBUS_PATH = "/org/x/StatusIcon" class ListItem(Gtk.ListBoxRow): def __init__(self, favinfo, mgr): super(Gtk.ListBoxRow, self).__init__() self.favinfo = favinfo self.mgr = mgr self.box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.add(self.box) label = Gtk.Label(label=self.favinfo.display_name, xalign=0) self.box.pack_start(label, False, False, 6) delete = Gtk.Button.new_from_icon_name("edit-delete-symbolic", Gtk.IconSize.BUTTON) delete.set_relief(Gtk.ReliefStyle.NONE) self.box.pack_end(delete, False, False, 6) delete.connect("clicked", self.on_delete_clicked) self.show_all() def on_delete_clicked(self, widget, data=None): self.mgr.remove(self.favinfo.uri) class FavoriteList(GObject.Object): def __init__(self): super(FavoriteList, self).__init__() self.window = None self.manager = XApp.Favorites.get_default() self.manager.connect("changed", self.on_manager_changed) self.window = Gtk.Window() self.window.set_default_size(600, 400) self.window.connect("destroy", self.on_window_destroy) self.window_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.main_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, margin=6, spacing=0) bar = Gtk.MenuBar() menu_item = Gtk.MenuItem.new_with_label("Favorites") favorites = self.manager.create_menu(None, self.favorite_menu_item_activated) menu_item.set_submenu(favorites) bar.append(menu_item) self.window_box.pack_start(bar, False, False, 0) self.window_box.pack_start(self.main_box, True, True, 0) # list stuff sw_frame = Gtk.Frame() sw = Gtk.ScrolledWindow(hadjustment=None, vadjustment=None) sw_frame.add(sw) self.list_box = Gtk.ListBox(activate_on_single_click=False) self.list_box.connect("selected-rows-changed", self.on_selection_changed) self.list_box.connect("row-activated", self.on_row_activated) sw.add(self.list_box) self.main_box.pack_start(sw_frame, True, True, 6) self.window.add(self.window_box) # controls control_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add_button = Gtk.Button.new_from_icon_name("list-add-symbolic", Gtk.IconSize.BUTTON) self.add_button.connect("clicked", self.on_add_clicked) control_box.pack_start(self.add_button, False, False, 6) self.main_box.pack_start(control_box, False, False, 6) self.window.show_all() self.selected_uri = None self.loading = False self.load_favorites() def favorite_menu_item_activated(self, manager, uri, data=None): print("activated", uri) self.manager.launch(uri, Gtk.get_current_event_time()) def load_favorites(self): self.loading = True # this will preserve the last selection for child in self.list_box.get_children(): self.list_box.remove(child) previously_selected = None favorites = self.manager.get_favorites(None) for info in favorites: row = ListItem(info, self.manager) self.list_box.insert(row, -1) if self.selected_uri == info.uri: previously_selected = row self.loading = False if previously_selected: self.list_box.select_row(previously_selected) def on_row_activated(self, box, row, data=None): self.manager.launch(row.favinfo.uri, Gtk.get_current_event_time()) def on_selection_changed(self, box, data=None): if self.loading: return row = self.list_box.get_selected_row() if row: self.selected_uri = row.favinfo.uri else: self.selected_uri = None def on_add_clicked(self, widget, data=None): dialog = Gtk.FileChooserDialog(title="Add file to favorites", parent=self.window, action=Gtk.FileChooserAction.OPEN) dialog.add_buttons("Add", Gtk.ResponseType.OK, "Cancel", Gtk.ResponseType.CANCEL) # dialog.add_shortcut_folder_uri ("favorites:///") res = dialog.run() if res == Gtk.ResponseType.OK: uri = dialog.get_uri() self.manager.add(uri) dialog.destroy() def on_manager_changed(self, manager, data=None): self.load_favorites() def on_window_destroy(self, widget, data=None): Gtk.main_quit() if __name__ == '__main__': test = FavoriteList() Gtk.main() xapp-2.8.8/test-scripts/xapp-gtk-window0000775000175000017500000001067514736763051017104 0ustar fabiofabio#! /usr/bin/python3 """ A demo/test script for the XAppAppGtkWindow class """ import sys, os import signal import gettext import time import gi gi.require_version('Gtk', '3.0') gi.require_version('XApp', '1.0') from gi.repository import GLib, Gtk, XApp, GObject signal.signal(signal.SIGINT, signal.SIG_DFL) class Main: def __init__(self): self.win = XApp.GtkWindow() self._animate_progress = 0 self.win.set_default_size(320, 200) frame = Gtk.Frame() frame.set_margin_start(2) frame.set_margin_end(2) frame.set_margin_top(2) frame.set_margin_bottom(2) self.win.add(frame) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) box.set_margin_start(2) box.set_margin_end(2) box.set_margin_top(2) box.set_margin_bottom(2) frame.add(box) heading = Gtk.Label() heading.set_markup("Use 'xprop -spy' to monitor changes") box.pack_start(heading, True, True, 4) hbox = Gtk.HBox() self.icon_name_entry = Gtk.Entry() self.icon_name_setter = Gtk.Button("Set icon name") self.icon_name_setter.connect("clicked", self.on_icon_name_setter_clicked) hbox.pack_start(self.icon_name_entry, True, True, 4) hbox.pack_start(self.icon_name_setter, False, False, 4) box.pack_start(hbox, True, True, 4) hbox = Gtk.HBox() self.icon_path_entry = Gtk.Entry() self.icon_path_setter = Gtk.Button("Set icon path") self.icon_path_setter.connect("clicked", self.on_icon_path_setter_clicked) hbox.pack_start(self.icon_path_entry, True, True, 4) hbox.pack_start(self.icon_path_setter, False, False, 4) box.pack_start(hbox, True, True, 4) hbox = Gtk.HBox() self.progress_label = Gtk.Label("Progress:") self.progress = Gtk.Scale() self.progress.connect("value-changed", self.on_progress_value_changed) self.progress.set_draw_value(True) self.progress.set_digits(0) self.progress.set_range(0, 100) hbox.pack_start(self.progress_label, False, False, 4) hbox.pack_start(self.progress, True, True, 4) box.pack_start(hbox, True, True, 4) hbox = Gtk.HBox() self.pulse_label = Gtk.Label("Progress pulse:") self.pulse_switch = Gtk.Switch() self.pulse_switch.set_halign(Gtk.Align.CENTER) self.pulse_switch.connect("notify::active", self.on_pulse_switch_changed) hbox.pack_start(self.pulse_label, False, False, 4) hbox.pack_start(self.pulse_switch, True, True, 4) box.pack_start(hbox, True, True, 4) hbox = Gtk.HBox() self.animate_button = Gtk.Button("Simulate progress over time") self.animate_button.connect("clicked", self.on_animate_progress_clicked) hbox.pack_start(self.animate_button, True, True, 4) box.pack_start(hbox, True, True, 4) frame.show_all() self.win.connect("delete-event", lambda w, e: Gtk.main_quit()) self.win.present() Gtk.main() def on_animate_progress_clicked(self, button, data=None): self.progress.set_sensitive(False) self.pulse_switch.set_sensitive(False) self._animate_progress = 0 self.win.set_progress(0) GObject.timeout_add(500, self.on_progress_tick) def on_progress_tick(self): self.win.set_progress(self._animate_progress) if self._animate_progress == 100: self.on_animate_complete() return False else: self._animate_progress += 1 return True def on_animate_complete(self): self.progress.set_sensitive(True) self.pulse_switch.set_sensitive(True) self.progress.set_value(100) def on_icon_name_setter_clicked(self, button, data=None): self.win.set_icon_name(self.icon_name_entry.get_text()) def on_icon_path_setter_clicked(self, button, data=None): try: self.win.set_icon_from_file(self.icon_path_entry.get_text()) except GLib.Error as e: print(e.message) def on_progress_value_changed(self, range, data=None): self.win.set_progress(int(self.progress.get_value())) self.pulse_switch.set_active(False) def on_pulse_switch_changed(self, switch, pspec, data=None): self.win.set_progress_pulse(self.pulse_switch.get_active()) if __name__ == "__main__": main = Main() xapp-2.8.8/test-scripts/xapp-status-icon-variants/0000775000175000017500000000000014736763051021151 5ustar fabiofabioxapp-2.8.8/test-scripts/xapp-status-icon-variants/dialog-error.png0000664000175000017500000000115114736763051024243 0ustar fabiofabioPNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATHŕka?ϛ6ЦvrR CRMKAH<2t`/E)NiF C.`c+~y Ul N% YAa/=8I|J?UԐM6SodkPAsmZ!Ө %UZY Q+FR5MG&Ikvq>䀠z>7&IIwZL .]ln'gEVApTFz+n(7p}Wp7z981EqG T]aAF=O X'*~$cH0],~X j }1+yGF%obX;Ip-|JX[*1?[*\}%Ptn]<}ug3Ωh2R¾ v/ ŞwIENDB`xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-ai0000775000175000017500000000620114736763051024704 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('AppIndicator3', '0.1') gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk, AppIndicator3 from gi.repository import GLib, GObject import sys """ This variant tests behavior of a program using mint-patched AppIndicator, which will fall back to XAppStatusIcon if there is no AppIndicator support in the desktop environment. AppIndicator expects both left- and right-click to display the menu, so internally, AppIndicator sets both primary and secondary menus on the XAppStatusIcon. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.window = None self.indicator = AppIndicator3.Indicator.new("xapp-status-icon-via-libappindicator", "info", AppIndicator3.IndicatorCategory.SYSTEM_SERVICES) self.indicator.set_icon_full("info", "Everything is fine.") self.indicator.set_label("AppIndicator3 1", "AppIndicator3 1000") self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.indicator.set_title("Testing patched appindicator fallback to XApp.StatusIcon") self.counter = 1 self.menu = Gtk.Menu() secondary_activation_item = Gtk.MenuItem.new_with_label("Activate target (middle click)") secondary_activation_item.connect("activate", self.activate_window) self.indicator.set_secondary_activate_target(secondary_activation_item) self.menu.append(secondary_activation_item) self.menu.append(Gtk.MenuItem.new_with_label("Engage the hyperdrive")) self.menu.append(Gtk.SeparatorMenuItem()) self.menu.append(Gtk.MenuItem.new_with_label("It's a trap!")) self.menu.show_all() self.indicator.set_menu(self.menu) self.indicator.connect("scroll-event", self.handle_scroll_event) GLib.timeout_add_seconds(2, self.on_timeout_cb) def activate_window(self, item, data=None): w = Gtk.Window(default_width=300, default_height=130) b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) w.add(b) self.label = Gtk.Label("How can I help you?") b.pack_start(self.label, True, True, 0) self.window = w w.show_all() def handle_scroll_event(self, icon, amount, direction, data=None): if self.window == None: self.activate_window(None) if direction == Gdk.ScrollDirection.UP: self.label.set_text("Scrolled Up!") elif direction == Gdk.ScrollDirection.DOWN: self.label.set_text("Scrolled Down!") elif direction == Gdk.ScrollDirection.LEFT: self.label.set_text("Scrolled Left!") else: self.label.set_text("Scrolled Right!") def on_timeout_cb(self): self.counter += 1 self.indicator.set_label("AppIndicator3 %d" % self.counter, "AppIndicator3 1000") return True if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/dialog-warning.png0000664000175000017500000000164614736763051024570 0ustar fabiofabioPNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<#IDATHՔOQƿ;3w3}L)JjJVLA b#jcB/411иӥ;ݸѕ1ƸM|-0Q#Fhg\hXG ,9>[iaʙ%6&~L _(=бl3Vȉ۷QKTTnY(R[+yD.dTIp,X-T)j“A{Pi7zT ay@U|.H)X]dy8;Fy$kj`҂5]c06У gσr +t^ (ږPպ%M4 ܷEe{0mހO{4`_d u,9/@:X#J@4Q<!Ml2<Y1'YH3 nK A8hݹ"@Jj|DŲ,2i"F` uNEU B~6Y BAG~7YY"xM\UnR@*dDDޟ@o.K4Ja}M[Eko \.#iG5ςek/~0'.9ޖT{x=~ qClf(0%z <쳙}ǥpkdM֙%&ytv;n?xj<8/HI7(g\k5S l6Aµ^<j\j*F :t4뚎Bqz@^9:s78 zĕ _~BIENDB`xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-all-menus0000775000175000017500000000556714736763051026226 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('XApp', '1.0') from gi.repository import XApp, Gtk, Gdk from gi.repository import GLib, GObject import sys """ This variant tests behavior of giving primary and secondary menus to the StatusIcon instance. The instance handles all menu-related things internally. There is no activation signal. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.status_icon = XApp.StatusIcon() self.status_icon.connect("state-changed", self.on_icon_state_changed) self.status_icon.set_icon_name("folder-symbolic") self.status_icon.set_tooltip_text("Testing primary and secondary menus") self.status_icon.set_label("label 1") self.status_icon.set_visible(True) self.status_icon.set_metadata(' { "highlight-both-menus": true } ') self.status_icon.connect("scroll-event", self.handle_scroll_event) self.counter = 1 self.label = None self.window = None menu = Gtk.Menu() menu.append(Gtk.MenuItem.new_with_label("Engage the hyperdrive")) menu.append(Gtk.SeparatorMenuItem()) menu.append(Gtk.MenuItem.new_with_label("It's a trap!")) menu.show_all() self.status_icon.set_primary_menu(menu) menu = Gtk.Menu() menu.append(Gtk.MenuItem.new_with_label("Hi, secondary menu here!")) menu.append(Gtk.SeparatorMenuItem()) menu.append(Gtk.MenuItem.new_with_label("Help me!")) menu.show_all() self.status_icon.set_secondary_menu(menu) GLib.timeout_add_seconds(2, self.on_timeout_cb) def on_icon_state_changed(self, icon, new_state): print("Icon state changed - the state is now: %s" % new_state) def on_timeout_cb(self): self.counter += 1 self.status_icon.set_label("label %d" % self.counter) return True def make_window(self): w = Gtk.Window(default_width=300, default_height=130) b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) w.add(b) self.label = Gtk.Label("How can I help you?") b.pack_start(self.label, True, True, 0) self.window = w w.show_all() def handle_scroll_event(self, icon, amount, orientation, time, data=None): if self.window == None: self.make_window() if orientation == XApp.ScrollDirection.UP: self.label.set_text("Scrolled Up !") elif orientation == XApp.ScrollDirection.DOWN: self.label.set_text("Scrolled Down!") elif orientation == XApp.ScrollDirection.LEFT: self.label.set_text("Scrolled Left!") else: self.label.set_text("Scrolled Right!") if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-raw-events0000775000175000017500000000522714736763051026415 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('XApp', '1.0') from gi.repository import XApp, Gtk, Gdk from gi.repository import GLib, GObject import sys """ This variant tests button-press-event and button-release-event with no menus assigned - it must do all menu handling itself. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.status_icon = XApp.StatusIcon() self.status_icon.connect("state-changed", self.on_icon_state_changed) self.status_icon.set_icon_name("folder-symbolic") self.status_icon.set_tooltip_text("Testing raw button press and release events") self.status_icon.set_label("label 1") self.status_icon.set_visible(True) self.counter = 1 self.menu = Gtk.Menu() self.menu.append(Gtk.MenuItem.new_with_label("Engage the hyperdrive")) self.menu.append(Gtk.SeparatorMenuItem()) self.menu.append(Gtk.MenuItem.new_with_label("It's a trap!")) self.menu.show_all() self.status_icon.connect("button-press-event", self.on_button_press) self.status_icon.connect("button-release-event", self.on_button_release) GLib.timeout_add_seconds(2, self.on_timeout_cb) def on_icon_state_changed(self, icon, new_state): print("Icon state changed - the state is now: %s" % new_state) def on_timeout_cb(self): self.counter += 1 self.status_icon.set_label("label %d" % self.counter) return True def on_button_press(self, status_icon, x, y, button, time, position_type): print("Mouse button %d was pressed at %d %d" % (button, x, y)) self.counter = 0 self.status_icon.set_label("label %d" % self.counter) def on_button_release(self, status_icon, x, y, button, time, position_type): print("Mouse button %d was released at %d %d" % (button, x, y)) if button == 3: def position_menu_cb(menu, pointer_x, pointer_y, user_data): [x, y, position] = user_data; if (position_type == Gtk.PositionType.BOTTOM): y = y - menu.get_allocation().height; if (position_type == Gtk.PositionType.RIGHT): x = x - menu.get_allocation().width; return (x, y, False) device = Gdk.Display.get_default().get_device_manager().get_client_pointer() self.menu.popup_for_device(device, None, None, position_menu_cb, [x, y, position_type], button, 0) if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-no-menus0000775000175000017500000000500214736763051026052 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('XApp', '1.0') from gi.repository import XApp, Gtk, Gdk from gi.repository import GLib, GObject import sys """ This variant tests behavior of providing no menus to the StatusIcon instance. This results in 'activate' signals being sent for all button presses. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.status_icon = XApp.StatusIcon() self.status_icon.connect("state-changed", self.on_icon_state_changed) self.status_icon.set_icon_name("folder-symbolic") self.status_icon.set_tooltip_text("Testing primary activate and secondary menu") self.status_icon.set_label("label 1") self.status_icon.set_visible(True) self.label = None self.window = None self.counter = 1 self.status_icon.connect("activate", self.on_status_icon_activate) self.status_icon.connect("scroll-event", self.handle_scroll_event) GLib.timeout_add_seconds(2, self.on_timeout_cb) def on_icon_state_changed(self, icon, new_state): print("Icon state changed - the state is now: %s" % new_state) def on_timeout_cb(self): self.counter += 1 self.status_icon.set_label("label %d" % self.counter) return True def on_status_icon_activate(self, icon, button, time): print("Activated via button %d" % button) self.counter = 0 self.status_icon.set_label("label %d" % self.counter) self.make_window() def make_window(self): w = Gtk.Window(default_width=300, default_height=130) b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) w.add(b) self.label = Gtk.Label("How can I help you?") b.pack_start(self.label, True, True, 0) self.window = w w.show_all() def handle_scroll_event(self, icon, amount, orientation, time, data=None): if self.window == None: self.make_window() if orientation == XApp.ScrollDirection.UP: self.label.set_text("Scrolled Up !") elif orientation == XApp.ScrollDirection.DOWN: self.label.set_text("Scrolled Down!") elif orientation == XApp.ScrollDirection.LEFT: self.label.set_text("Scrolled Left!") else: self.label.set_text("Scrolled Right!") if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-activate-and-menu0000775000175000017500000000545414736763051027626 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('XApp', '1.0') from gi.repository import XApp, Gtk, Gdk from gi.repository import GLib, GObject import sys """ This variant tests behavior of giving a only a secondary menu to the StatusIcon instance. This results in 'activate' signals being sent for primary clicks only. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.status_icon = XApp.StatusIcon() self.status_icon.connect("state-changed", self.on_icon_state_changed) self.status_icon.set_icon_name("folder-symbolic") self.status_icon.set_tooltip_text("Testing primary activate and secondary menu") self.status_icon.set_label("label 1") self.status_icon.set_visible(True) self.status_icon.connect("scroll-event", self.handle_scroll_event) self.label = None self.window = None self.counter = 1 menu = Gtk.Menu() menu.append(Gtk.MenuItem.new_with_label("Hi, secondary menu here!")) menu.append(Gtk.SeparatorMenuItem()) menu.append(Gtk.MenuItem.new_with_label("Help me!")) menu.show_all() self.status_icon.set_secondary_menu(menu) self.status_icon.connect("activate", self.on_status_icon_activate) GLib.timeout_add_seconds(2, self.on_timeout_cb) def on_icon_state_changed(self, icon, new_state): print("Icon state changed - the state is now: %s" % new_state) def on_timeout_cb(self): self.counter += 1 self.status_icon.set_label("label %d" % self.counter) return True def on_status_icon_activate(self, icon, button, time): print("Activated via button %d" % button) self.counter = 0 self.status_icon.set_label("label %d" % self.counter) self.make_window() def make_window(self): w = Gtk.Window(default_width=300, default_height=130) b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) w.add(b) self.label = Gtk.Label("How can I help you?") b.pack_start(self.label, True, True, 0) self.window = w w.show_all() def handle_scroll_event(self, icon, amount, orientation, time, data=None): if self.window == None: self.make_window() if orientation == XApp.ScrollDirection.UP: self.label.set_text("Scrolled Up !") elif orientation == XApp.ScrollDirection.DOWN: self.label.set_text("Scrolled Down!") elif orientation == XApp.ScrollDirection.LEFT: self.label.set_text("Scrolled Left!") else: self.label.set_text("Scrolled Right!") if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/xapp-status-icon-activate-and-menu-popup0000775000175000017500000000647314736763051030771 0ustar fabiofabio#!/usr/bin/python3 import gi gi.require_version('XApp', '1.0') from gi.repository import XApp, Gtk, Gdk from gi.repository import GLib, GObject import sys """ This variant tests behavior of giving a only a secondary menu to the StatusIcon instance. This results in 'activate' signals being sent for primary clicks only. """ class App(GObject.Object): def __init__(self): super(App, self).__init__() self.status_icon = XApp.StatusIcon() self.status_icon.connect("state-changed", self.on_icon_state_changed) self.status_icon.set_icon_name("folder-symbolic") self.status_icon.set_tooltip_text("Testing primary activate and secondary menu") self.status_icon.set_label("label 1") self.status_icon.set_visible(True) self.status_icon.connect("scroll-event", self.handle_scroll_event) self.label = None self.window = None self.counter = 1 self.menu = Gtk.Menu() self.menu.append(Gtk.MenuItem.new_with_label("Hi, secondary menu here!")) self.menu.append(Gtk.SeparatorMenuItem()) self.menu.append(Gtk.MenuItem.new_with_label("Help me!")) self.menu.show_all() self.status_icon.connect("activate", self.on_status_icon_activate) self.status_icon.connect("button-release-event", self.on_status_icon_button_release) GLib.timeout_add_seconds(2, self.on_timeout_cb) def on_icon_state_changed(self, icon, new_state): print("Icon state changed - the state is now: %s" % new_state) def on_timeout_cb(self): self.counter += 1 self.status_icon.set_label("label %d" % self.counter) return True def on_status_icon_activate(self, icon, button, time): print("Activated via button %d" % button) if button not in (Gdk.BUTTON_PRIMARY, Gdk.BUTTON_MIDDLE): return self.counter = 0 self.status_icon.set_label("label %d" % self.counter) self.make_window() def make_window(self): w = Gtk.Window(default_width=300, default_height=130) b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) w.add(b) self.label = Gtk.Label("How can I help you?") b.pack_start(self.label, True, True, 0) self.window = w w.show_all() def on_status_icon_button_release(self, icon, x, y, button, time, position, data=None): if button in (Gdk.BUTTON_PRIMARY, Gdk.BUTTON_MIDDLE): return self.menu.append(Gtk.MenuItem.new_with_label("Added new menu %d" % self.counter)) self.menu.show_all() self.status_icon.popup_menu(self.menu, x, y, button, time, position) def handle_scroll_event(self, icon, amount, orientation, time, data=None): if self.window == None: self.make_window() if orientation == XApp.ScrollDirection.UP: self.label.set_text("Scrolled Up !") elif orientation == XApp.ScrollDirection.DOWN: self.label.set_text("Scrolled Down!") elif orientation == XApp.ScrollDirection.LEFT: self.label.set_text("Scrolled Left!") else: self.label.set_text("Scrolled Right!") if __name__ == '__main__': GLib.setenv ("G_MESSAGES_DEBUG", "all", True) app = App() try: GLib.MainLoop().run() except KeyboardInterrupt: pass sys.exit(0) xapp-2.8.8/test-scripts/xapp-status-icon-variants/qt-system-tray.py0000775000175000017500000000424714736763051024460 0ustar fabiofabio#!/usr/bin/env python3 # install python3-pyside2.qtgui, .qtwidgets from PySide2.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction from PySide2.QtGui import QIcon, QPixmap class App(QApplication): def __init__(self): super(App, self).__init__([]) self.icon_type = "theme" self.tic_toc = False self.setQuitOnLastWindowClosed(False) self.tray = QSystemTrayIcon() self.tray.setIcon(QIcon.fromTheme("dialog-warning")) self.tray.setVisible(True) self.menu = QMenu() entry = "Use icon name" action = QAction(entry) action.triggered.connect(self.use_icon_theme) self.menu.addAction(action) entry = "Use icon file" action2 = QAction(entry) action2.triggered.connect(self.use_icon_file) self.menu.addAction(action2) entry = "Use icon pixels" action3 = QAction(entry) action3.triggered.connect(self.use_icon_pixels) self.menu.addAction(action3) entry = "Quit" action4 = QAction(entry) action4.triggered.connect(self.quit) self.menu.addAction(action4) self.tray.setContextMenu(self.menu) self.tray.activated.connect(self.icon_activated) self.exec_() def use_icon_theme(self, item): self.icon_type = "theme" def use_icon_file(self, item): self.icon_type = "file" def use_icon_pixels(self, item): self.icon_type = "pixels" def icon_activated(self, reason): if self.icon_type == "theme": icon = QIcon.fromTheme("dialog-warning" if self.tic_toc else "dialog-error") self.tray.setIcon(icon) self.tic_toc = not self.tic_toc elif self.icon_type == "file": icon = QIcon("./dialog-warning.png" if self.tic_toc else "./dialog-error.png") self.tray.setIcon(icon) self.tic_toc = not self.tic_toc else: pixmap = QPixmap("./dialog-warning.png" if self.tic_toc else "./dialog-error.png") icon = QIcon(pixmap) self.tray.setIcon(icon) self.tic_toc = not self.tic_toc if __name__ == '__main__': app = App() xapp-2.8.8/test-scripts/xapp-gpu-offload-helper0000775000175000017500000000220114736763051020454 0ustar fabiofabio#! /usr/bin/python3 """ A demo/test script for the XAppAppGtkWindow class """ import sys, os import signal import gi gi.require_version('XApp', '1.0') from gi.repository import GLib, Gio, XApp, GObject signal.signal(signal.SIGINT, signal.SIG_DFL) class Main: def __init__(self): if len(sys.argv) > 1 and sys.argv[1] == "sync": self.helper = XApp.GpuOffloadHelper.get_sync() self.on_helper_ready(self.helper, self.helper.is_ready()) else: self.helper = XApp.GpuOffloadHelper.get() self.helper.connect("ready", self.on_helper_ready) def on_helper_ready(self, helper, success): print("Success:", success); print("Number of GPUS:", helper.get_n_gpus()) info = helper.get_default_info() print("%d - %s -- '%s'" % (info.id, info.display_name, info.get_shell_env_prefix())) for info in helper.get_offload_infos(): print("%d - %s -- '%s'" % (info.id, info.display_name, info.get_shell_env_prefix())) if __name__ == "__main__": main = Main() if len(sys.argv) == 1: GLib.MainLoop.new(None, True).run() exit(0) xapp-2.8.8/debian/0000775000175000017500000000000014736763051012663 5ustar fabiofabioxapp-2.8.8/meson.build0000664000175000017500000000303514736763051013604 0ustar fabiofabioproject( 'xapp', 'c', version : '2.8.8', default_options : ['buildtype=debugoptimized'], meson_version : '>=0.56.0' ) gnome = import('gnome') pkg = import('pkgconfig') i18n = import('i18n') dbus_services_dir = dependency('dbus-1').get_variable(pkgconfig: 'session_bus_services_dir', pkgconfig_define: ['datadir', get_option('datadir')]) sn_watcher_dir = join_paths(get_option('prefix'), get_option('libdir'), 'xapps') cdata = configuration_data() cdata.set_quoted('GETTEXT_PACKAGE', 'xapp') cdata.set_quoted('XAPP_SN_WATCHER_PATH', join_paths([sn_watcher_dir, 'xapp-sn-watcher'])) cdata.set('ENABLE_DEBUG', get_option('buildtype') in ['debug', 'debugoptimized']) add_global_arguments([ '-Wunused', '-Wimplicit-function-declaration' ], language: 'c' ) if not get_option('deprecated_warnings') add_global_arguments([ '-Wno-deprecated-declarations', '-Wno-deprecated', '-Wno-declaration-after-statement', ], language: 'c', ) endif app_lib_only = get_option('app-lib-only') c = configure_file(output : 'config.h', configuration : cdata ) top_inc = include_directories('.') subdir('libxapp') subdir('po') subdir('schemas') if get_option('introspection') subdir('pygobject') endif if not app_lib_only subdir('icons') subdir('status-applets') subdir('scripts') subdir('data') endif if get_option('status-notifier') and not app_lib_only subdir('xapp-sn-watcher') endif if get_option('docs') subdir('docs') endif xapp-2.8.8/icons/0000775000175000017500000000000014736763051012554 5ustar fabiofabioxapp-2.8.8/icons/meson.build0000664000175000017500000000015714736763051014721 0ustar fabiofabioinstall_subdir('hicolor', install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'icons'), ) xapp-2.8.8/icons/hicolor/0000775000175000017500000000000014736763051014213 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/0000775000175000017500000000000014736763051015761 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/places/0000775000175000017500000000000014736763051017230 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/places/xapp-user-favorites-symbolic.svg0000664000175000017500000000477414736763051025530 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/places/xapp-user-favorites.svg0000664000175000017500000000545614736763051023707 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/emblems/0000775000175000017500000000000014736763051017405 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/emblems/emblem-xapp-favorite.svg0000664000175000017500000000423714736763051024160 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/0000775000175000017500000000000014736763051017421 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/actions/xapp-favorite-symbolic.svg0000664000175000017500000000700314736763051024546 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-search-wrap-symbolic.svg0000664000175000017500000000506314736763051025147 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/view-right-pane-symbolic-rtl.svg0000664000175000017500000001131414736763051025566 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/view-right-pane-symbolic.svg0000664000175000017500000001133314736763051024770 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-annotations-text-symbolic.svg0000664000175000017500000000241614736763051026251 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-edit-symbolic.svg0000664000175000017500000000620414736763051023656 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-diaporama-symbolic.svg0000664000175000017500000000503414736763051024666 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/view-bottom-pane-symbolic.svg0000664000175000017500000001122014736763051025152 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-unfavorite-symbolic.svg0000664000175000017500000000575714736763051025127 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/view-left-pane-symbolic.svg0000664000175000017500000001131414736763051024604 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-view-fit-height-symbolic.svg0000664000175000017500000000626014736763051025733 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-annotations-squiggly-symbolic.svg0000664000175000017500000000617314736763051027135 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-search-entire-word-symbolic.svg0000664000175000017500000001141514736763051026433 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-go-history-previous-symbolic.svg0000664000175000017500000001354214736763051026712 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-text-case-symbolic.svg0000664000175000017500000001041314736763051024623 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/view-left-pane-symbolic-rtl.svg0000664000175000017500000001133614736763051025407 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-view-fit-width-symbolic.svg0000664000175000017500000000674714736763051025614 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/extract-archive-symbolic.svg0000664000175000017500000000644214736763051025060 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-use-regex-symbolic.svg0000664000175000017500000000633414736763051024641 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-go-history-next-symbolic.svg0000664000175000017500000001354214736763051026014 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/media-mount-symbolic.svg0000664000175000017500000000745214736763051024210 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-go-history-previous-symbolic-rtl.svg0000664000175000017500000001354214736763051027511 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/category-search-symbolic.svg0000664000175000017500000001035314736763051025043 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-pin-symbolic.svg0000664000175000017500000000465214736763051023524 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/xapp-unpin-symbolic.svg0000664000175000017500000000463514736763051024070 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/view-top-pane-symbolic.svg0000664000175000017500000001125614736763051024461 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-go-history-next-symbolic-rtl.svg0000664000175000017500000001354214736763051026613 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/actions/add-files-to-archive-symbolic.svg0000664000175000017500000001440014736763051025647 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/icons/hicolor/scalable/actions/xapp-format-text-highlight-symbolic.svg0000664000175000017500000001635014736763051027153 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/apps/0000775000175000017500000000000014736763051016724 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/apps/xapp-favorites-app-symbolic.svg0000664000175000017500000000477314736763051025025 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/apps/xapp-favorites-app.svg0000664000175000017500000000545614736763051023205 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/apps/xapp-mate-status-applet.svg0000664000175000017500000002023314736763051024145 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/categories/0000775000175000017500000000000014736763051020106 5ustar fabiofabioxapp-2.8.8/icons/hicolor/scalable/categories/xapp-prefs-plugins-symbolic.svg0000664000175000017500000000450014736763051026211 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/categories/xapp-prefs-preview-symbolic.svg0000664000175000017500000000364214736763051026217 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/categories/xapp-prefs-display-symbolic.svg0000664000175000017500000000512614736763051026202 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/categories/xapp-prefs-behavior-symbolic.svg0000664000175000017500000000464114736763051026335 0ustar fabiofabio image/svg+xml xapp-2.8.8/icons/hicolor/scalable/categories/xapp-prefs-toolbar-symbolic.svg0000664000175000017500000000230314736763051026171 0ustar fabiofabio image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme xapp-2.8.8/libxapp/0000775000175000017500000000000014736763051013100 5ustar fabiofabioxapp-2.8.8/libxapp/xapp-glade-catalog.c0000664000175000017500000000061614736763051016701 0ustar fabiofabio#include "config.h" #include #include "xapp-gtk-window.h" #include "xapp-icon-chooser-button.h" #include "xapp-stack-sidebar.h" void xapp_glade_catalog_init (const gchar *catalog_name); void xapp_glade_catalog_init (const gchar *catalog_name) { g_type_ensure (XAPP_TYPE_GTK_WINDOW); g_type_ensure (XAPP_TYPE_ICON_CHOOSER_BUTTON); g_type_ensure (XAPP_TYPE_STACK_SIDEBAR); } xapp-2.8.8/libxapp/xapp-status-icon-monitor.c0000664000175000017500000004215514736763051020157 0ustar fabiofabio #include #include #include #include #include #include #include #include #include "xapp-status-icon.h" #include "xapp-status-icon-monitor.h" #include "xapp-statusicon-interface.h" #define DEBUG_FLAG XAPP_DEBUG_STATUS_ICON #include "xapp-debug.h" #define MONITOR_NAME "org.x.StatusIconMonitor" #define STATUS_ICON_MATCH "org.x.StatusIcon." #define STATUS_ICON_INTERFACE "org.x.StatusIcon" #define STATUS_ICON_PATH "/org/x/StatusIcon" #define STATUS_ICON_PATH_PREFIX STATUS_ICON_PATH "/" #define WATCHER_MAX_RESTARTS 2 enum { ICON_ADDED, ICON_REMOVED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; /** * SECTION:xapp-status-icon-monitor * @Short_description: Looks for XAppStatusIcons on DBUS and communicates * info to an applet to represent the icons. * @Title: XAppStatusIconMonitor * * The XAppStatusIconMonitor is intended to be utilized by some status applet * to display info about an app. * * The simplest way to use is to make a new instance of this monitor, and connect * to the #XAppStatusIconMonitor::icon-added and #XAppStatusIconMonitor::icon-removed signals. * The received object for both of these signals is an #XAppStatusIconInterfaceProxy. * It represents an application's #XAppStatusIcon, and has properties available for * describing the icon name, tooltip, label and visibility. * * The proxy also provides methods to handle clicks, which can be called by the applet, * to request that the app display its menu. */ typedef struct { GDBusConnection *connection; GHashTable *object_managers; guint owner_id; guint listener_id; } XAppStatusIconMonitorPrivate; struct _XAppStatusIconMonitor { GObject parent_instance; }; G_DEFINE_TYPE_WITH_PRIVATE (XAppStatusIconMonitor, xapp_status_icon_monitor, G_TYPE_OBJECT) static void on_object_manager_name_owner_changed (GObject *object, GParamSpec *pspec, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); gchar *name, *owner; g_object_get (object, "name-owner", &owner, "name", &name, NULL); DEBUG("App name owner changed - name '%s' is now %s)", name, owner != NULL ? "owned" : "unowned"); if (owner == NULL) { g_hash_table_remove (priv->object_managers, name); } g_free (owner); g_free (name); } static void object_manager_object_added (XAppObjectManagerClient *manager, GDBusObject *object, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); GDBusInterface *proxy; proxy = g_dbus_object_get_interface (object, STATUS_ICON_INTERFACE); g_signal_emit (self, signals[ICON_ADDED], 0, XAPP_STATUS_ICON_INTERFACE_PROXY (proxy)); g_object_unref (proxy); } static void object_manager_object_removed (XAppObjectManagerClient *manager, GDBusObject *object, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); GDBusInterface *proxy; proxy = g_dbus_object_get_interface (object, STATUS_ICON_INTERFACE); g_signal_emit (self, signals[ICON_REMOVED], 0, XAPP_STATUS_ICON_INTERFACE_PROXY (proxy)); g_object_unref (proxy); } static void new_object_manager_created (GObject *object, GAsyncResult *res, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); GDBusObjectManager *obj_mgr; GList *objects = NULL, *iter; GError *error; gchar *name; error = NULL; obj_mgr = xapp_object_manager_client_new_finish (res, &error); if (error) { g_warning ("Couldn't create object manager for bus name: %s", error->message); g_error_free (error); return; } g_object_get (obj_mgr, "name", &name, NULL); DEBUG("Object manager added for new bus name: '%s'", name); g_signal_connect (obj_mgr, "notify::name-owner", G_CALLBACK (on_object_manager_name_owner_changed), self); g_signal_connect (obj_mgr, "object-added", G_CALLBACK (object_manager_object_added), self); g_signal_connect (obj_mgr, "object-removed", G_CALLBACK (object_manager_object_removed), self); g_hash_table_insert (priv->object_managers, name, obj_mgr); objects = g_dbus_object_manager_get_objects (obj_mgr); for (iter = objects; iter != NULL; iter = iter->next) { GDBusObject *object = G_DBUS_OBJECT (iter->data); GDBusInterface *proxy = g_dbus_object_get_interface (object, STATUS_ICON_INTERFACE); g_signal_emit (self, signals[ICON_ADDED], 0, proxy); g_object_unref (proxy); } g_list_free_full (objects, g_object_unref); } static void add_object_manager_for_name (XAppStatusIconMonitor *self, const gchar *name) { XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); gchar **name_parts = NULL; name_parts = g_strsplit (name, ".", -1); if (g_strv_length (name_parts) == 4) { xapp_object_manager_client_new (priv->connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START, name, STATUS_ICON_PATH, NULL, new_object_manager_created, self); } else { DEBUG ("Adding object manager failed, bus name '%s' is invalid", name); } g_strfreev (name_parts); } static void on_list_names_completed (GObject *source, GAsyncResult *res, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); GVariant *result; GVariantIter *iter; gchar *str; GError *error; error = NULL; result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error); if (error != NULL) { g_critical ("XAppStatusIconMonitor: attempt to ListNames failed: %s\n", error->message); g_error_free (error); return; } g_variant_get (result, "(as)", &iter); while (g_variant_iter_loop (iter, "s", &str)) { /* the '.' at the end so we don't catch ourselves in this */ if (g_str_has_prefix (str, STATUS_ICON_MATCH)) { DEBUG ("Found new status icon app: %s", str); add_object_manager_for_name (self, str); } } g_variant_iter_free (iter); g_variant_unref (result); } static void find_and_add_icons (XAppStatusIconMonitor *self) { XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); DEBUG("Looking for status icon apps on the bus"); /* If there are no monitors (applets) already running when this is set up, * this won't find anything. The XAppStatusIcons will be in fallback mode, * and will only attempt to switch back after seeing this monitor appear * on the bus, which means they'll show up via our NameOwnerChanged handler. * Basically, this will never find anything if we're the first monitor to appear * on the bus. */ g_dbus_connection_call (priv->connection, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames", NULL, G_VARIANT_TYPE ("(as)"), G_DBUS_CALL_FLAGS_NONE, 3000, /* 3 secs */ NULL, on_list_names_completed, self); } static void add_sn_watcher (XAppStatusIconMonitor *self) { GError *error = NULL; if (!g_spawn_command_line_async (XAPP_SN_WATCHER_PATH, &error)) { g_warning ("Could not spawn StatusNotifier watcher (xapp-sn-watcher): %s", error->message); g_warning ("Support will be limited to native XAppStatusIcons only"); g_error_free (error); } } static void name_owner_changed (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); const gchar *name; const gchar *old_owner; const gchar *new_owner; DEBUG ("NameOwnerChanged signal received: %s)", sender_name); g_variant_get (parameters, "(&s&s&s)", &name, &old_owner, &new_owner); if (new_owner[0] != '\0') { add_object_manager_for_name (self, name); } } static void add_name_listener (XAppStatusIconMonitor *self) { XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); DEBUG ("Adding NameOwnerChanged listener for status icon apps"); priv->listener_id = g_dbus_connection_signal_subscribe (priv->connection, "org.freedesktop.DBus", "org.freedesktop.DBus", "NameOwnerChanged", "/org/freedesktop/DBus", "org.x.StatusIcon", G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_NAMESPACE, name_owner_changed, self, NULL); } static void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data) { if (connection == NULL) { g_warning ("error acquiring session bus"); } } static void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); DEBUG ("Name owned on bus: %s", name); add_name_listener (self); find_and_add_icons (self); add_sn_watcher (self); } static void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (user_data); XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); DEBUG ("Connected to bus: %s", name); priv->connection = connection; } static void connect_to_bus (XAppStatusIconMonitor *self) { XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); gchar *valid_app_name, *owned_name; static gint unique_id = 0; valid_app_name = g_strdelimit (g_strdup (g_get_prgname ()), ".-,=+~`/", '_'); owned_name = g_strdup_printf ("%s.%s_%d", MONITOR_NAME, valid_app_name, unique_id++); g_free (valid_app_name); DEBUG ("Attempting to own name on bus: %s", owned_name); priv->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, owned_name, G_DBUS_CONNECTION_FLAGS_NONE, on_bus_acquired, on_name_acquired, on_name_lost, self, NULL); g_free(owned_name); } static void xapp_status_icon_monitor_init (XAppStatusIconMonitor *self) { XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); priv->object_managers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); connect_to_bus (self); } static void xapp_status_icon_monitor_dispose (GObject *object) { XAppStatusIconMonitor *self = XAPP_STATUS_ICON_MONITOR (object); XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (self); DEBUG ("XAppStatusIconMonitor dispose (%p)", object); if (priv->connection != NULL) { if (priv->listener_id > 0) { g_dbus_connection_signal_unsubscribe (priv->connection, priv->listener_id); priv->listener_id = 0; } if (priv->object_managers != NULL) { g_hash_table_unref (priv->object_managers); priv->object_managers = NULL; } if (priv->owner_id > 0) { g_bus_unown_name(priv->owner_id); priv->owner_id = 0; } g_clear_object (&priv->connection); } G_OBJECT_CLASS (xapp_status_icon_monitor_parent_class)->dispose (object); } static void xapp_status_icon_monitor_finalize (GObject *object) { DEBUG ("XAppStatusIconMonitor finalize (%p)", object); G_OBJECT_CLASS (xapp_status_icon_monitor_parent_class)->finalize (object); } static void xapp_status_icon_monitor_class_init (XAppStatusIconMonitorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xapp_status_icon_monitor_dispose; gobject_class->finalize = xapp_status_icon_monitor_finalize; /** * XAppStatusIconMonitor::icon-added: * @monitor: the #XAppStatusIconMonitor * @proxy: the interface proxy for the #XAppStatusIcon that has been added. * * This signal is emitted by the monitor when it has discovered a new * #XAppStatusIcon on the bus. */ signals[ICON_ADDED] = g_signal_new ("icon-added", XAPP_TYPE_STATUS_ICON_MONITOR, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, XAPP_TYPE_STATUS_ICON_INTERFACE_PROXY); /** * XAppStatusIconMonitor::icon-removed: * @monitor: the #XAppStatusIconMonitor * @proxy: the #XAppStatusIcon proxy that has been removed. * * This signal is emitted by the monitor when an #XAppStatusIcon has disappeared * from the bus. */ signals[ICON_REMOVED] = g_signal_new ("icon-removed", XAPP_TYPE_STATUS_ICON_MONITOR, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, XAPP_TYPE_STATUS_ICON_INTERFACE_PROXY); } static void gather_objects_foreach_func (gpointer key, gpointer value, gpointer user_data) { GDBusObjectManager *obj_mgr = G_DBUS_OBJECT_MANAGER (value); GList **ret = (GList **) user_data; GList *objects = NULL, *iter; objects = g_dbus_object_manager_get_objects (obj_mgr); for (iter = objects; iter != NULL; iter = iter->next) { GDBusObject *object = G_DBUS_OBJECT (iter->data); GDBusInterface *proxy = g_dbus_object_get_interface (object, STATUS_ICON_INTERFACE); *ret = g_list_prepend (*ret, proxy); g_object_unref (proxy); } g_list_free_full (objects, g_object_unref); } /** * xapp_status_icon_monitor_list_icons: * @monitor: a #XAppStatusIconMonitor * * List known icon proxies. * * Returns: (element-type XAppStatusIconMonitor) (transfer container): a #GList of icons * * Since: 1.6 */ GList * xapp_status_icon_monitor_list_icons (XAppStatusIconMonitor *monitor) { g_return_val_if_fail (XAPP_IS_STATUS_ICON_MONITOR (monitor), NULL); GList *ret = NULL; XAppStatusIconMonitorPrivate *priv = xapp_status_icon_monitor_get_instance_private (monitor); g_hash_table_foreach (priv->object_managers, (GHFunc) gather_objects_foreach_func, &ret); return ret; } /** * xapp_status_icon_monitor_new: * * Creates a new monitor. * * Returns: (transfer full): a new #XAppStatusIconMonitor. Use g_object_unref when finished. * * Since: 1.6 */ XAppStatusIconMonitor * xapp_status_icon_monitor_new (void) { return g_object_new (XAPP_TYPE_STATUS_ICON_MONITOR, NULL); } xapp-2.8.8/libxapp/xapp-status-icon.h0000664000175000017500000000640214736763051016472 0ustar fabiofabio#ifndef __XAPP_STATUS_ICON_H__ #define __XAPP_STATUS_ICON_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_STATUS_ICON (xapp_status_icon_get_type ()) G_DECLARE_FINAL_TYPE (XAppStatusIcon, xapp_status_icon, XAPP, STATUS_ICON, GObject) /** * XAppStatusIconState: * @XAPP_STATUS_ICON_STATE_NATIVE: The #XAppStatusIcon is currently being handled * by an #XAppStatusIconMonitor (usually in an applet). * @XAPP_STATUS_ICON_STATE_FALLBACK: The #XAppStatusIcon is currently being handled * by a legacy system tray implementation (using GtkStatusIcon). * @XAPP_STATUS_ICON_STATE_NO_SUPPORT: The #XAppStatusIcon is not currently being handled by any * kind of status icon implementation. */ typedef enum { XAPP_STATUS_ICON_STATE_NATIVE, XAPP_STATUS_ICON_STATE_FALLBACK, XAPP_STATUS_ICON_STATE_NO_SUPPORT } XAppStatusIconState; /** * XAppScrollDirection: * @XAPP_SCROLL_UP: Scroll theoretical content up. * @XAPP_SCROLL_DOWN: Scroll theoretical content down. * @XAPP_SCROLL_LEFT: Scroll theoretical content left. * @XAPP_SCROLL_RIGHT: Scroll theoretical content right. * * Represents the direction of icon scroll events. */ typedef enum { XAPP_SCROLL_UP, XAPP_SCROLL_DOWN, XAPP_SCROLL_LEFT, XAPP_SCROLL_RIGHT } XAppScrollDirection; XAppStatusIcon *xapp_status_icon_new (void); XAppStatusIcon *xapp_status_icon_new_with_name (const gchar *name); void xapp_status_icon_set_name (XAppStatusIcon *icon, const gchar *name); void xapp_status_icon_set_icon_name (XAppStatusIcon *icon, const gchar *icon_name); gint xapp_status_icon_get_icon_size (XAppStatusIcon *icon); void xapp_status_icon_set_tooltip_text (XAppStatusIcon *icon, const gchar *tooltip_text); void xapp_status_icon_set_label (XAppStatusIcon *icon, const gchar *label); void xapp_status_icon_set_visible (XAppStatusIcon *icon, const gboolean visible); gboolean xapp_status_icon_get_visible (XAppStatusIcon *icon); void xapp_status_icon_popup_menu (XAppStatusIcon *icon, GtkMenu *menu, gint x, gint y, guint button, guint _time, gint panel_position); void xapp_status_icon_set_primary_menu (XAppStatusIcon *icon, GtkMenu *menu); GtkWidget *xapp_status_icon_get_primary_menu (XAppStatusIcon *icon); void xapp_status_icon_set_secondary_menu (XAppStatusIcon *icon, GtkMenu *menu); GtkWidget *xapp_status_icon_get_secondary_menu (XAppStatusIcon *icon); XAppStatusIconState xapp_status_icon_get_state (XAppStatusIcon *icon); void xapp_status_icon_set_metadata (XAppStatusIcon *icon, const gchar *metadata); /* static */ gboolean xapp_status_icon_any_monitors (void); G_END_DECLS #endif /* __XAPP_STATUS_ICON_H__ */ xapp-2.8.8/libxapp/xapp-dark-mode-manager.h0000664000175000017500000000072314736763051017474 0ustar fabiofabio#ifndef __XAPP_DARK_MODE_MANAGER_H__ #define __XAPP_DARK_MODE_MANAGER_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_DARK_MODE_MANAGER (xapp_dark_mode_manager_get_type ()) G_DECLARE_FINAL_TYPE (XAppDarkModeManager, xapp_dark_mode_manager, XAPP, DARK_MODE_MANAGER, GObject) XAppDarkModeManager *xapp_dark_mode_manager_new (gboolean prefer_dark_mode); G_END_DECLS #endif /* __XAPP_DARK_MODE_MANAGER_H__ */ xapp-2.8.8/libxapp/meson.build0000664000175000017500000001132714736763051015246 0ustar fabiofabioglib_min_ver = '>=2.44.0' gio_dep = dependency('gio-2.0', version: glib_min_ver, required: true) gio_unix_dep = dependency('gio-unix-2.0', version: glib_min_ver, required: true) glib_dep = dependency('glib-2.0', version: glib_min_ver, required: true) gtk3_dep = dependency('gtk+-3.0', version: '>=3.22', required: true) gmodule_dep = dependency('gmodule-2.0', version: glib_min_ver, required: true) libdeps = [] libdeps += gio_dep libdeps += gio_unix_dep libdeps += glib_dep libdeps += gtk3_dep libdeps += gmodule_dep libdeps += dependency('gdk-pixbuf-2.0', version: '>=2.22.0', required: true) libdeps += dependency('cairo', required: true) libdeps += dependency('x11', required: true) favorite_vfs_sources = [ 'favorite-vfs-file.c', 'favorite-vfs-file-enumerator.c', 'favorite-vfs-file-monitor.c' ] xapp_debug = [ 'xapp-debug.h', 'xapp-debug.c' ] xapp_headers = [ 'xapp-dark-mode-manager.h', 'xapp-favorites.h', 'xapp-gtk-window.h', 'xapp-gpu-offload-helper.h', 'xapp-icon-chooser-button.h', 'xapp-icon-chooser-dialog.h', 'xapp-monitor-blanker.h', 'xapp-preferences-window.h', 'xapp-stack-sidebar.h', 'xapp-status-icon.h', 'xapp-status-icon-monitor.h', 'xapp-style-manager.h', 'xapp-util.h', 'xapp-visibility-group.h' ] xapp_sources = [ 'xapp-dark-mode-manager.c', 'xapp-favorites.c', 'xapp-glade-catalog.c', 'xapp-gtk-window.c', 'xapp-gpu-offload-helper.c', 'xapp-icon-chooser-button.c', 'xapp-icon-chooser-dialog.c', 'xapp-monitor-blanker.c', 'xapp-preferences-window.c', 'xapp-stack-sidebar.c', 'xapp-status-icon.c', 'xapp-status-icon-monitor.c', 'xapp-style-manager.c', 'xapp-util.c', 'xapp-visibility-group.c' ] switcheroo_sources = gnome.gdbus_codegen( 'xapp-switcheroo-interface', sources: 'net.hadess.SwitcherooControl.xml', interface_prefix: 'net.hadess', namespace: 'XApp' ) xapp_sources += switcheroo_sources if not app_lib_only libdeps += dependency('libgnomekbdui', required: true) xapp_headers += 'xapp-kbd-layout-controller.h' xapp_sources += 'xapp-kbd-layout-controller.c' endif xapp_statusicon_interface_sources = gnome.gdbus_codegen( 'xapp-statusicon-interface', sources: 'org.x.StatusIcon.xml', interface_prefix: 'org.x.StatusIcon', namespace: 'XApp', annotations: [[ 'org.x.StatusIcon', 'org.gtk.GDBus.C.Name', 'StatusIconInterface' ]], object_manager: true, install_header: true, install_dir: join_paths(get_option('prefix'), get_option('includedir'), 'xapp/libxapp') ) dbus_headers = [ xapp_statusicon_interface_sources[1] ] xapp_sources += xapp_statusicon_interface_sources[0] xapp_enums = gnome.mkenums_simple('xapp-enums', sources : xapp_headers, identifier_prefix : 'XApp', symbol_prefix : 'xapp' ) libxapp = library('xapp', sources : xapp_headers + xapp_sources + xapp_enums + dbus_headers + favorite_vfs_sources + xapp_debug, include_directories: [top_inc], version: meson.project_version(), soversion: '1', dependencies: libdeps, c_args: ['-Wno-declaration-after-statement', '-DG_LOG_DOMAIN="XApp"'], link_args: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', '-lm'], install: true ) install_headers(xapp_headers, subdir: 'xapp/libxapp' ) libxapp_dep = declare_dependency( link_with: libxapp, include_directories: top_inc, dependencies: libdeps, sources: [ xapp_headers, dbus_headers ] ) if get_option('introspection') gir = gnome.generate_gir(libxapp, namespace: 'XApp', nsversion: '1.0', sources: xapp_headers + xapp_sources + dbus_headers + xapp_enums, identifier_prefix: 'XApp', symbol_prefix: 'xapp_', export_packages: 'xapp', includes: ['GObject-2.0', 'Gtk-3.0'], install: true ) endif pkg.generate( libraries: libxapp, name: 'xapp', subdirs: 'xapp', description: 'Utility library', version: meson.project_version(), requires: ['gtk+-3.0', 'gobject-2.0', 'cairo'], requires_private: 'xkbfile', ) install_data(['xapp-glade-catalog.xml'], install_dir : join_paths(get_option('datadir'), 'glade/catalogs') ) if get_option('vapi') assert(is_variable('gir'), 'vapi requires introspection to be enabled') gnome.generate_vapi('xapp', packages: ['glib-2.0', 'gio-unix-2.0', 'gtk+-3.0'], sources: gir[0], metadata_dirs: meson.current_source_dir(), install: true ) endif if not app_lib_only gtk3_module = shared_module( 'xapp-gtk3-module', ['xapp-gtk3-module.c'], include_directories: [top_inc], dependencies: [gtk3_dep, libxapp_dep], install: true, install_dir: join_paths(gtk3_dep.get_variable(pkgconfig: 'libdir'),'gtk-3.0','modules') ) endif xapp-2.8.8/libxapp/xapp-monitor-blanker.h0000664000175000017500000000133714736763051017326 0ustar fabiofabio#ifndef __XAPP_MONITOR_BLANKER_H__ #define __XAPP_MONITOR_BLANKER_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_MONITOR_BLANKER (xapp_monitor_blanker_get_type ()) G_DECLARE_FINAL_TYPE (XAppMonitorBlanker, xapp_monitor_blanker, XAPP, MONITOR_BLANKER, GObject) XAppMonitorBlanker *xapp_monitor_blanker_new (void); void xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self, GtkWindow *window); void xapp_monitor_blanker_unblank_monitors (XAppMonitorBlanker *self); gboolean xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self); G_END_DECLS #endif /* __XAPP_MONITOR_BLANKER_H__ */ xapp-2.8.8/libxapp/xapp-debug.c0000664000175000017500000000644714736763051015313 0ustar fabiofabio/* * xapp-debug: debug loggers for xapp * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * Copyright (C) 2010 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Copied from nemo */ #include #include #include "xapp-debug.h" #ifdef ENABLE_DEBUG static DebugFlags flags = 0; static gboolean initialized = FALSE; static GDebugKey keys[] = { { "GtkWindow", XAPP_DEBUG_WINDOW }, { "Favorites", XAPP_DEBUG_FAVORITES }, { "FavoriteVfs", XAPP_DEBUG_FAVORITE_VFS }, { "StatusIcon", XAPP_DEBUG_STATUS_ICON }, { "SnWatcher", XAPP_DEBUG_SN_WATCHER }, { "GtkModule", XAPP_DEBUG_MODULE}, { "VisibilityGroup", XAPP_DEBUG_VISIBILITY_GROUP}, { "GpuOffload", XAPP_DEBUG_GPU_OFFLOAD}, { "DarkModeManager", XAPP_DEBUG_DARK_MODE_MANAGER}, { 0, } }; const gchar * debug_flag_to_string (DebugFlags flag) { switch (flag) { case XAPP_DEBUG_WINDOW: return "GtkWindow"; case XAPP_DEBUG_FAVORITES: return "Favorites"; case XAPP_DEBUG_FAVORITE_VFS: return "FavoriteVFS"; case XAPP_DEBUG_STATUS_ICON: return "StatusIcon"; case XAPP_DEBUG_SN_WATCHER: return "SnWatcher"; case XAPP_DEBUG_MODULE: return "GtkModule"; case XAPP_DEBUG_VISIBILITY_GROUP: return "VisibilityGroup"; case XAPP_DEBUG_GPU_OFFLOAD: return "GpuOffload"; case XAPP_DEBUG_DARK_MODE_MANAGER: return "DarkModeManager"; } return ""; } static void xapp_debug_set_flags_from_env (void) { guint nkeys; const gchar *flags_string; for (nkeys = 0; keys[nkeys].value; nkeys++); flags_string = g_getenv ("XAPP_DEBUG"); if (flags_string) xapp_debug_set_flags (g_parse_debug_string (flags_string, keys, nkeys)); initialized = TRUE; } void xapp_debug_set_flags (DebugFlags new_flags) { flags |= new_flags; initialized = TRUE; } gboolean xapp_debug_flag_is_set (DebugFlags flag) { return flag & flags; } void xapp_debug (DebugFlags flag, const gchar *format, ...) { va_list args; va_start (args, format); xapp_debug_valist (flag, format, args); va_end (args); } void xapp_debug_valist (DebugFlags flag, const gchar *format, va_list args) { if (G_UNLIKELY(!initialized)) xapp_debug_set_flags_from_env (); if (flag & flags) { // I would think this should be G_LOG_LEVEL_DEBUG, but I can't get it to show up // in the journal/xsession-errors unless I drop it to message (even with G_MESSAGES_DEBUG=all) g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args); } } #endif /* ENABLE_DEBUG */ xapp-2.8.8/libxapp/favorite-vfs-file-monitor.c0000664000175000017500000003510114736763051020261 0ustar fabiofabio#include "xapp-favorites.h" #include "favorite-vfs-file.h" #include "favorite-vfs-file-monitor.h" #define DEBUG_FLAG XAPP_DEBUG_FAVORITE_VFS #include "xapp-debug.h" typedef struct { gulong changed_handler_id; GHashTable *file_monitors; GList *infos; GVolumeMonitor *mount_mon; } FavoriteVfsFileMonitorPrivate; struct _FavoriteVfsFileMonitor { GObject parent_instance; FavoriteVfsFileMonitorPrivate *priv; }; G_DEFINE_TYPE_WITH_PRIVATE(FavoriteVfsFileMonitor, \ favorite_vfs_file_monitor, \ G_TYPE_FILE_MONITOR) GFile *_favorite_vfs_file_new_for_info (XAppFavoriteInfo *info); // static void // rename_favorite (GFile *old_file, // GFile *new_file) // { // gchar *old_file_uri, *new_file_uri; // old_file_uri = g_file_get_uri (old_file); // new_file_uri = g_file_get_uri (new_file); // _xapp_favorites_rename (xapp_favorites_get_default (), // old_file_uri, // new_file_uri); // g_free (old_file_uri); // g_free (new_file_uri); // } static void favorite_real_file_changed (GFileMonitor *rfmonitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, gpointer user_data) { // Disabled return; // g_return_if_fail (FAVORITE_IS_VFS_FILE_MONITOR (user_data)); // FavoriteVfsFileMonitor *monitor = FAVORITE_VFS_FILE_MONITOR (user_data); // FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); // DEBUG ("real file changed: %s: %d", g_file_get_uri (file), event_type); // switch (event_type) // { // case G_FILE_MONITOR_EVENT_MOVED_OUT: // break; // { // gchar *uri = g_file_get_uri (file); // DEBUG ("Deleted: %s\n", uri); // xapp_favorites_remove (xapp_favorites_get_default (), uri); // g_free (uri); // } // break; // case G_FILE_MONITOR_EVENT_RENAMED: // break; // { // gchar *uri = g_file_get_uri (file); // DEBUG ("Renamed: %s\n", uri); // rename_favorite (file, other_file); // } // break; // case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: // case G_FILE_MONITOR_EVENT_CHANGED: // { // gchar *uri = g_file_get_uri (file); // GList *iter; // for (iter = priv->infos; iter != NULL; iter = iter->next) // { // XAppFavoriteInfo *info = (XAppFavoriteInfo *) iter->data; // if (g_strcmp0 (uri, info->uri) == 0) // { // GFile *fav_file; // gchar *uri; // uri = path_to_fav_uri (info->display_name); // fav_file = g_file_new_for_uri (uri); // DEBUG ("Changed: %s", uri); // g_free (uri); // g_file_monitor_emit_event (G_FILE_MONITOR (monitor), // fav_file, // NULL, // G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED); // g_file_monitor_emit_event (G_FILE_MONITOR (monitor), // fav_file, // NULL, // G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT); // g_object_unref (fav_file); // break; // } // } // } // break; // case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: // case G_FILE_MONITOR_EVENT_CREATED: // // case G_FILE_MONITOR_EVENT_CHANGED: // case G_FILE_MONITOR_EVENT_PRE_UNMOUNT: // case G_FILE_MONITOR_EVENT_UNMOUNTED: // case G_FILE_MONITOR_EVENT_MOVED: // case G_FILE_MONITOR_EVENT_MOVED_IN: // case G_FILE_MONITOR_EVENT_DELETED: // break; // default: // g_warn_if_reached (); // } } static void unmonitor_files (FavoriteVfsFileMonitor *monitor) { /* Disabled. See below */ return; FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); if (priv->file_monitors != NULL) { g_hash_table_destroy (priv->file_monitors); priv->file_monitors = NULL; } } static void monitor_files (FavoriteVfsFileMonitor *monitor) { /* Disabled - this isn't necessary right now but could be expanded to help * support less integrated apps. */ return; FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); GList *iter; priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_object_unref); for (iter = priv->infos; iter != NULL; iter = iter->next) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) iter->data; GFileMonitor *real_monitor; GFile *real_file; GError *error; DEBUG ("Monitoring real file: %s\n", info->uri); error = NULL; real_file = g_file_new_for_uri (info->uri); real_monitor = g_file_monitor (real_file, G_FILE_MONITOR_WATCH_MOVES, NULL, &error); g_object_unref (real_file); if (real_monitor == NULL) { if (error != NULL) { g_warning ("Unable to add file monitor for '%s': %s", info->uri, error->message); g_error_free (error); } continue; } g_hash_table_insert (priv->file_monitors, (gpointer) g_strdup (info->uri), (gpointer) real_monitor); g_signal_connect (real_monitor, "changed", G_CALLBACK (favorite_real_file_changed), monitor); } } static gint find_info_by_uri (gconstpointer ptr_a, gconstpointer ptr_b) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) ptr_a; const gchar *uri = (gchar *) ptr_b; // GCompareFunc returns 0 when there's a match. return g_strcmp0 (info->uri, uri); } static void favorites_changed (XAppFavorites *favorites, gpointer user_data) { g_return_if_fail (XAPP_IS_FAVORITES (favorites)); g_return_if_fail (FAVORITE_IS_VFS_FILE_MONITOR (user_data)); FavoriteVfsFileMonitor *monitor = FAVORITE_VFS_FILE_MONITOR (user_data); FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); GList *added, *removed; GList *iter, *new_infos; if (g_file_monitor_is_cancelled (G_FILE_MONITOR (monitor))) { return; } added = removed = NULL; new_infos = xapp_favorites_get_favorites (favorites, NULL); for (iter = priv->infos; iter != NULL; iter = iter->next) { XAppFavoriteInfo *old_info = (XAppFavoriteInfo *) iter->data; GList *res = g_list_find_custom (new_infos, (gpointer) old_info->uri, (GCompareFunc) find_info_by_uri); if (res == NULL) { removed = g_list_prepend (removed, old_info); } } for (iter = new_infos; iter != NULL; iter = iter->next) { XAppFavoriteInfo *new_info = (XAppFavoriteInfo *) iter->data; GList *res = g_list_find_custom (priv->infos, (gpointer) new_info->uri, (GCompareFunc) find_info_by_uri); if (res == NULL) { added = g_list_prepend (added, new_info); } } for (iter = removed; iter != NULL; iter = iter->next) { XAppFavoriteInfo *removed_info = (XAppFavoriteInfo *) iter->data; GFile *file = _favorite_vfs_file_new_for_info (removed_info); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), file, NULL, G_FILE_MONITOR_EVENT_DELETED); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), file, NULL, G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT); g_object_unref (file); } for (iter = added; iter != NULL; iter = iter->next) { XAppFavoriteInfo *added_info = (XAppFavoriteInfo *) iter->data; GFile *file = _favorite_vfs_file_new_for_info (added_info); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), file, NULL, G_FILE_MONITOR_EVENT_CREATED); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), file, NULL, G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT); g_object_unref (file); } g_list_free (added); g_list_free (removed); GList *tmp = priv->infos; priv->infos = new_infos; g_list_free_full (tmp, (GDestroyNotify) xapp_favorite_info_free); //FIXME: add/remove individually unmonitor_files (monitor); monitor_files (monitor); } static void mounts_changed (GVolumeMonitor *mount_mon, GMount *mount, gpointer user_data) { g_return_if_fail (FAVORITE_IS_VFS_FILE_MONITOR (user_data)); FavoriteVfsFileMonitor *monitor = FAVORITE_VFS_FILE_MONITOR (user_data); FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); GFile *root; GList *iter, *mount_favorites; root = g_mount_get_root (mount); mount_favorites = NULL; // Find any favorites that are descendent from root. for (iter = priv->infos; iter != NULL; iter = iter->next) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) iter->data; GFile *fav_file = g_file_new_for_uri (info->uri); gchar *relpath; relpath = g_file_get_relative_path (root, fav_file); if (relpath != NULL) { mount_favorites = g_list_prepend (mount_favorites, info); } g_free (relpath); g_object_unref (fav_file); } if (mount_favorites != NULL) { for (iter = mount_favorites; iter != NULL; iter = iter->next) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) iter->data; GFile *fav_file; gchar *uri; uri = path_to_fav_uri (info->display_name); fav_file = g_file_new_for_uri (uri); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), fav_file, NULL, G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED); g_file_monitor_emit_event (G_FILE_MONITOR (monitor), fav_file, NULL, G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT); g_free (uri); g_object_unref (fav_file); } g_list_free (mount_favorites); } g_object_unref (root); unmonitor_files (monitor); monitor_files (monitor); } static gboolean favorite_vfs_file_monitor_cancel (GFileMonitor* gfilemon) { FavoriteVfsFileMonitor *monitor = FAVORITE_VFS_FILE_MONITOR (gfilemon); FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); if (priv->changed_handler_id > 0) { g_signal_handler_disconnect (xapp_favorites_get_default (), priv->changed_handler_id); } return TRUE; } static void favorite_vfs_file_monitor_init (FavoriteVfsFileMonitor *monitor) { FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private (monitor); priv->mount_mon = g_volume_monitor_get (); g_signal_connect (priv->mount_mon, "mount-added", G_CALLBACK (mounts_changed), monitor); g_signal_connect (priv->mount_mon, "mount-removed", G_CALLBACK (mounts_changed), monitor); priv->infos = xapp_favorites_get_favorites (xapp_favorites_get_default (), NULL); priv->changed_handler_id = g_signal_connect (xapp_favorites_get_default (), "changed", G_CALLBACK (favorites_changed), monitor); monitor_files (monitor); } static void favorite_vfs_file_monitor_dispose (GObject *object) { FavoriteVfsFileMonitor *monitor = FAVORITE_VFS_FILE_MONITOR(object); FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private(monitor); unmonitor_files (monitor); g_signal_handlers_disconnect_by_func (priv->mount_mon, mounts_changed, monitor); g_clear_object (&priv->mount_mon); if (priv->infos != NULL) { g_list_free_full (priv->infos, (GDestroyNotify) xapp_favorite_info_free); priv->infos = NULL; } G_OBJECT_CLASS (favorite_vfs_file_monitor_parent_class)->dispose (object); } static void favorite_vfs_file_monitor_finalize (GObject *object) { // FavoriteVfsFileMonitor *self = FAVORITE_VFS_FILE_MONITOR(object); // FavoriteVfsFileMonitorPrivate *priv = favorite_vfs_file_monitor_get_instance_private(self); G_OBJECT_CLASS (favorite_vfs_file_monitor_parent_class)->finalize (object); } static void favorite_vfs_file_monitor_class_init (FavoriteVfsFileMonitorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GFileMonitorClass *monitor_class = G_FILE_MONITOR_CLASS (klass); gobject_class->dispose = favorite_vfs_file_monitor_dispose; gobject_class->finalize = favorite_vfs_file_monitor_finalize; monitor_class->cancel = favorite_vfs_file_monitor_cancel; } GFileMonitor * favorite_vfs_file_monitor_new (void) { return G_FILE_MONITOR (g_object_new (FAVORITE_TYPE_VFS_FILE_MONITOR, NULL)); } xapp-2.8.8/libxapp/xapp-preferences-window.c0000664000175000017500000001455414736763051020031 0ustar fabiofabio#include #include "xapp-preferences-window.h" #include "xapp-stack-sidebar.h" /** * SECTION:xapp-preferences-window * @Short_description: A base preferences window * @Title: XAppPreferencesWindow * * The XAppPreferencesWindow sets up a simple dialog * window with a GtkStack, GtkSidebarSwitcher, and * GtkActionBar. The stack switcher and action bar only * show when needed. */ typedef struct { GtkWidget *stack; XAppStackSidebar *side_switcher; GtkWidget *button_area; gint num_pages; } XAppPreferencesWindowPrivate; enum { CLOSE, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; G_DEFINE_TYPE_WITH_PRIVATE (XAppPreferencesWindow, xapp_preferences_window, GTK_TYPE_WINDOW) static void xapp_preferences_window_init (XAppPreferencesWindow *window) { XAppPreferencesWindowPrivate *priv = xapp_preferences_window_get_instance_private (window); GtkWidget *main_box; GtkWidget *secondary_box; GtkStyleContext *style_context; gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_container_set_border_width (GTK_CONTAINER (window), 5); main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_set_border_width (GTK_CONTAINER (main_box), 5); gtk_container_add (GTK_CONTAINER (window), main_box); secondary_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_set_border_width (GTK_CONTAINER (secondary_box), 5); gtk_box_pack_start (GTK_BOX (main_box), secondary_box, TRUE, TRUE, 0); style_context = gtk_widget_get_style_context (secondary_box); gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_FRAME); priv->side_switcher = xapp_stack_sidebar_new (); gtk_widget_set_size_request (GTK_WIDGET (priv->side_switcher), 100, -1); gtk_box_pack_start (GTK_BOX (secondary_box), GTK_WIDGET (priv->side_switcher), FALSE, FALSE, 0); gtk_widget_set_no_show_all (GTK_WIDGET (priv->side_switcher), TRUE); // XAppStackSidebar calls show_all on itself during its init, we need to hide // it here so our single/multiple page mechanism here works properly. gtk_widget_hide (GTK_WIDGET (priv->side_switcher)); priv->stack = gtk_stack_new (); gtk_stack_set_transition_type (GTK_STACK (priv->stack), GTK_STACK_TRANSITION_TYPE_CROSSFADE); gtk_box_pack_start (GTK_BOX (secondary_box), priv->stack, TRUE, TRUE, 0); xapp_stack_sidebar_set_stack (priv->side_switcher, GTK_STACK (priv->stack)); style_context = gtk_widget_get_style_context (priv->stack); gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_VIEW); priv->button_area = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_container_set_border_width (GTK_CONTAINER (priv->button_area), 5); gtk_box_pack_start (GTK_BOX (main_box), priv->button_area, FALSE, FALSE, 0); gtk_widget_set_no_show_all (priv->button_area, TRUE); /* Keep track of the number of pages so we can hide the stack switcher with < 2 */ priv->num_pages = 0; } static void xapp_preferences_window_close (XAppPreferencesWindow *window) { gtk_window_close (GTK_WINDOW (window)); } static void xapp_preferences_window_class_init (XAppPreferencesWindowClass *klass) { GtkBindingSet *binding_set; klass->close = xapp_preferences_window_close; signals[CLOSE] = g_signal_new ("close", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (XAppPreferencesWindowClass, close), NULL, NULL, NULL, G_TYPE_NONE, 0); binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "close", 0); } /** * xapp_preferences_window_new: * * Creates a new #XAppPreferencesWindow. * * Returns: a newly created #XAppPreferencesWindow */ XAppPreferencesWindow * xapp_preferences_window_new (void) { return g_object_new (XAPP_TYPE_PREFERENCES_WINDOW, NULL); } /** * xapp_preferences_window_add_page: * @window: a #XAppPreferencesWindow * @widget: a #GtkWidget to add * @name: the name for the page * @title: a human-readable title for the page * * Adds a page to the window. The page is identified by name. The * title will be used in the sidebar so should be short. The sidebar * will show automatically once at least two pages are added. */ void xapp_preferences_window_add_page (XAppPreferencesWindow *window, GtkWidget *widget, const gchar *name, const gchar *title) { XAppPreferencesWindowPrivate *priv = xapp_preferences_window_get_instance_private (window); g_return_if_fail (XAPP_IS_PREFERENCES_WINDOW (window)); gtk_stack_add_titled (GTK_STACK (priv->stack), widget, name, title); priv->num_pages++; if (priv->num_pages > 1) { gtk_widget_set_no_show_all (GTK_WIDGET (priv->side_switcher), FALSE); } } /** * xapp_preferences_window_add_button: * @window: a #XAppPreferencesWindow * @button: a #GtkWidget to add * @pack_type: a #GtkPackType to use * * Adds a button to the bottom action bar of the window. Where * the button is place will be determined by the #GtkPackType. The * action bar will show automatically once at least one button is * added. */ void xapp_preferences_window_add_button (XAppPreferencesWindow *window, GtkWidget *button, GtkPackType pack_type) { XAppPreferencesWindowPrivate *priv = xapp_preferences_window_get_instance_private (window); GtkStyleContext *style_context; g_return_if_fail (XAPP_IS_PREFERENCES_WINDOW (window)); g_return_if_fail (GTK_IS_WIDGET (button)); gtk_container_add (GTK_CONTAINER (priv->button_area), button); if (pack_type == GTK_PACK_END) { gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (priv->button_area), button, TRUE); } else if (pack_type != GTK_PACK_START) { return; } style_context = gtk_widget_get_style_context (button); gtk_style_context_add_class (style_context, "text-button"); gtk_widget_set_no_show_all (priv->button_area, FALSE); } xapp-2.8.8/libxapp/xapp-gpu-offload-helper.c0000664000175000017500000004604514736763051017703 0ustar fabiofabio#include "config.h" #define DEBUG_FLAG XAPP_DEBUG_GPU_OFFLOAD #include "xapp-debug.h" #include "xapp-gpu-offload-helper.h" #include "xapp-switcheroo-interface.h" #include "xapp-util.h" static const gchar *DEFAULT_ENV_ARGV[5] = { "__NV_PRIME_RENDER_OFFLOAD", "1", "__GLX_VENDOR_LIBRARY_NAME", "nvidia", NULL }; XAppGpuInfo *xapp_gpu_info_copy (const XAppGpuInfo *info); void xapp_gpu_info_free (XAppGpuInfo *info); G_DEFINE_BOXED_TYPE (XAppGpuInfo, xapp_gpu_info, xapp_gpu_info_copy, xapp_gpu_info_free); /** * SECTION:xapp-gpu-offload-helper * @Short_description: Simple interface for Switcheroo. * @Title: XAppGpuOffloadHelper * * #XAppGpuOffloadHelper is class that provides a reliable property cache and simple return methods * for getting offload_helper parameters and conditions from the Switcheroo interface. * * Since 2.6 */ XAppGpuInfo * xapp_gpu_info_copy (const XAppGpuInfo *info) { DEBUG ("XAppGpuInfo copy"); g_return_val_if_fail (info != NULL, NULL); #if GLIB_CHECK_VERSION(2, 68, 0) XAppGpuInfo *_info = g_memdup2 (info, sizeof(XAppGpuInfo)); #else XAppGpuInfo *_info = g_memdup (info, sizeof(XAppGpuInfo)); #endif _info->id = info->id; _info->is_default = info->is_default; _info->display_name = g_strdup (info->display_name); _info->env_strv = g_strdupv (info->env_strv); return _info; } /** * xapp_gpu_info_free: * @group: The #XAppGpuInfo to free. * * Destroys the #XAppGpuInfo. * * Since 2.6 */ void xapp_gpu_info_free (XAppGpuInfo *info) { DEBUG ("XAppGpuInfo free"); g_return_if_fail (info != NULL); g_strfreev (info->env_strv); g_free (info->display_name); g_free (info); } /** * xapp_gpu_info_get_shell_env_prefix: * @info: An #XAppGpuInfo. * * Creates a new string in a form intended to prefix a shell command, containing * the appropriate name/values for this gpu. For example: * * __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1 * * Returns: (transfer full): A new string, free with g_free(). * * Since 2.6 */ gchar * xapp_gpu_info_get_shell_env_prefix(XAppGpuInfo *info) { g_return_val_if_fail (info != NULL, g_strdup ("")); if (info->env_strv == NULL) { return g_strdup (""); } g_return_val_if_fail (g_strv_length (info->env_strv) % 2 == 0, g_strdup ("")); GString *args = g_string_new (NULL); for (gint i = 0; i < g_strv_length (info->env_strv); i++) { g_string_append_printf (args, "%s=", info->env_strv[i++]); g_string_append_printf (args, "%s ", info->env_strv[i]); } DEBUG ("%s", args->str); return g_string_free (args, FALSE); } struct _XAppGpuOffloadHelper { GObject parent_instance; GCancellable *cancellable; GDBusProxy *control; guint num_gpus; GMutex gpu_infos_mutex; GList *gpu_infos; // XAppGpuInfos gboolean ready; gboolean ubuntu_offload_support_found; }; G_DEFINE_TYPE (XAppGpuOffloadHelper, xapp_gpu_offload_helper, G_TYPE_OBJECT) enum { READY, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; static void process_gpus_property (XAppGpuOffloadHelper *helper, GError **error) { GVariant *gpus; GList *infos = NULL; gint num_children, i; gboolean default_found = FALSE; gpus = xapp_switcheroo_control_get_gpus (XAPP_SWITCHEROO_CONTROL (helper->control)); num_children = g_variant_n_children(gpus); for (i = 0; i < num_children; i++) { g_autoptr(GVariant) gpu; g_autoptr(GVariant) vname = NULL; g_autoptr(GVariant) venv = NULL; g_autoptr(GVariant) vdefault = NULL; const char *name; g_autofree const char **env_strv = NULL; gsize env_len; gboolean is_default; gpu = g_variant_get_child_value (gpus, i); if (!gpu || !g_variant_is_of_type (gpu, G_VARIANT_TYPE ("a{s*}"))) { continue; } vname = g_variant_lookup_value (gpu, "Name", NULL); venv = g_variant_lookup_value (gpu, "Environment", NULL); vdefault= g_variant_lookup_value (gpu, "Default", NULL); if (!vname || !venv) continue; name = g_variant_get_string (vname, NULL); env_strv = g_variant_get_strv (venv, &env_len); if (env_strv != NULL && env_len % 2 != 0) { g_autofree char *debug = NULL; debug = g_strjoinv ("\n", (char **) env_strv); g_warning ("Invalid environment returned from switcheroo:\n%s", debug); g_clear_pointer (&env_strv, g_free); continue; } is_default = vdefault ? g_variant_get_boolean (vdefault) : FALSE; if (is_default) { default_found = TRUE; } XAppGpuInfo *info = g_new0 (XAppGpuInfo, 1); info->id = i; info->display_name = g_strdup (name); info->env_strv = g_strdupv ((gchar **) env_strv); info->is_default = is_default; infos = g_list_append (infos, info); } if (infos == NULL) { *error = g_error_new (g_dbus_error_quark (), G_DBUS_ERROR_FAILED, "GPUs property didn't contain any valid gpu info."); } if (!default_found) { *error = g_error_new (g_dbus_error_quark (), G_DBUS_ERROR_FAILED, "No default GPU exists."); g_list_free_full (infos, (GDestroyNotify) xapp_gpu_info_free); infos = NULL; } g_mutex_lock (&helper->gpu_infos_mutex); g_list_free_full (helper->gpu_infos, (GDestroyNotify) xapp_gpu_info_free); helper->gpu_infos = infos; helper->num_gpus = g_list_length (helper->gpu_infos); g_mutex_unlock (&helper->gpu_infos_mutex); } static void populate_gpu_info (XAppGpuOffloadHelper *helper, GError **error) { GVariant *gpus; g_auto(GStrv) cached_props = NULL; cached_props = g_dbus_proxy_get_cached_property_names (helper->control); if (cached_props != NULL && g_strv_contains ((const gchar * const *) cached_props, "GPUs")) { // (already cached) DEBUG ("GPUs property already cached, skipping Get"); process_gpus_property (helper, error); return; } gpus = g_dbus_connection_call_sync (g_dbus_proxy_get_connection (helper->control), g_dbus_proxy_get_name (helper->control), g_dbus_proxy_get_object_path (helper->control), "org.freedesktop.DBus.Properties", "Get", g_variant_new ("(ss)", g_dbus_proxy_get_interface_name (helper->control), "GPUs"), NULL, G_DBUS_CALL_FLAGS_NONE, -1, helper->cancellable, error); if (gpus == NULL) { return; } g_dbus_proxy_set_cached_property (helper->control, "(GPUs)", gpus); process_gpus_property (helper, error); } static void on_bus_connection_closed (GDBusConnection *connection, gboolean remote_peer_vanished, GError *error, gpointer user_data) { XAppGpuOffloadHelper *helper = XAPP_GPU_OFFLOAD_HELPER (user_data); if (error != NULL) { g_critical ("Bus connection unexpectedly lost: (%d) %s", error->code, error->message); g_error_free (error); } g_object_unref (helper); } static void helper_init_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { XAppGpuOffloadHelper *helper = XAPP_GPU_OFFLOAD_HELPER (source_object); XAppSwitcherooControl *control; GError *error = NULL; control = xapp_switcheroo_control_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "net.hadess.SwitcherooControl", "/net/hadess/SwitcherooControl", helper->cancellable, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_task_return_boolean (task, TRUE); } g_critical ("Could not create switcheroo proxy: (%d): %s", error->code, error->message); g_task_return_error (task, error); } if (g_dbus_proxy_get_name_owner (G_DBUS_PROXY (control)) != NULL) { DEBUG ("Got switcheroo-control proxy successfully"); helper->control = G_DBUS_PROXY (control); g_signal_connect (g_dbus_proxy_get_connection (helper->control), "closed", G_CALLBACK (on_bus_connection_closed), helper); populate_gpu_info (helper, &error); if (error != NULL) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_task_return_boolean (task, TRUE); } g_critical ("Could not get gpu info from switcheroo proxy: (%d): %s", error->code, error->message); g_task_return_error (task, error); } } else { g_warning ("Switcheroo-control doesn't appear to be running, checking for Ubuntu support..."); // Add a default GPU no matter what just so we're 'valid' XAppGpuInfo *info; GList *infos = NULL; info = g_new0 (XAppGpuInfo, 1); info->id = 0; info->is_default = TRUE; info->display_name = g_strdup ("Integrated GPU"); infos = g_list_append (infos, info); // If there's support, make up a default and non-default XAppGpuInfo. if (xapp_util_gpu_offload_supported ()) { info = g_new0 (XAppGpuInfo, 1); info->id = 1; info->is_default = FALSE; info->display_name = g_strdup ("NVIDIA GPU"); info->env_strv = g_strdupv ((gchar **) DEFAULT_ENV_ARGV); infos = g_list_append (infos, info); } g_mutex_lock (&helper->gpu_infos_mutex); g_list_free_full (helper->gpu_infos, (GDestroyNotify) xapp_gpu_info_free); helper->gpu_infos = infos; helper->num_gpus = g_list_length (helper->gpu_infos); g_mutex_unlock (&helper->gpu_infos_mutex); } g_task_return_boolean (task, TRUE); } static void helper_task_callback (GObject *source_object, GAsyncResult *res, gpointer user_data) { XAppGpuOffloadHelper *helper = XAPP_GPU_OFFLOAD_HELPER (source_object); // Todo with an error? This callback is only used in async mode. gboolean success = g_task_propagate_boolean (G_TASK (res), NULL); if (success) { helper->ready = TRUE; if (DEBUGGING) { DEBUG ("Gpu infos:"); for (GList *l = helper->gpu_infos; l != NULL; l = l->next) { XAppGpuInfo *info = l->data; gchar *shell_str = xapp_gpu_info_get_shell_env_prefix (info); gchar *debug = g_strdup_printf ("%s: %s", info->display_name, shell_str); DEBUG ("%s", debug); g_free (shell_str); g_free (debug); } } } g_signal_emit (helper, signals[READY], 0, helper->ready); } static void init_helper (XAppGpuOffloadHelper *helper, gboolean synchronous) { GTask *task = g_task_new (helper, helper->cancellable, helper_task_callback, NULL); if (synchronous) { g_task_run_in_thread_sync (task, helper_init_thread); helper_task_callback (G_OBJECT (helper), G_ASYNC_RESULT (task), NULL); } else { g_task_run_in_thread (task, helper_init_thread); } g_object_unref (task); } static void xapp_gpu_offload_helper_init (XAppGpuOffloadHelper *helper) { helper->cancellable = g_cancellable_new (); g_mutex_init (&helper->gpu_infos_mutex); } static void xapp_gpu_offload_helper_dispose (GObject *object) { XAppGpuOffloadHelper *helper = XAPP_GPU_OFFLOAD_HELPER (object); if (helper->gpu_infos != NULL) { g_list_free_full (helper->gpu_infos, (GDestroyNotify) xapp_gpu_info_free); helper->gpu_infos = NULL; } g_clear_object (&helper->cancellable); g_clear_object (&helper->control); helper->ready = FALSE; G_OBJECT_CLASS (xapp_gpu_offload_helper_parent_class)->dispose (object); } static void xapp_gpu_offload_helper_class_init (XAppGpuOffloadHelperClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = xapp_gpu_offload_helper_dispose; /** * XAppGpuOffloadHelper::ready: * @helper: the #XAppGpuOffloadHelper * @success: Whether or not the helper initialize successfully. * * This signal is emitted by the helper when it has completed * gathering GPU information. It will only be sent once. */ signals[READY] = g_signal_new ("ready", XAPP_TYPE_GPU_OFFLOAD_HELPER, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); } static gboolean idle_init_helper (gpointer user_data) { XAppGpuOffloadHelper *helper = XAPP_GPU_OFFLOAD_HELPER (user_data); init_helper (helper, FALSE); return G_SOURCE_REMOVE; } static XAppGpuOffloadHelper * helper_get_common (gboolean synchronous) { static XAppGpuOffloadHelper *gpu_offload_helper = NULL; static gsize once_init_value = 0; if (g_once_init_enter (&once_init_value)) { gpu_offload_helper = g_object_new (XAPP_TYPE_GPU_OFFLOAD_HELPER, NULL); if (synchronous) { DEBUG ("Initializing helper synchronously."); init_helper (gpu_offload_helper, TRUE); } else { DEBUG ("Initializing helper asynchronously"); g_idle_add ((GSourceFunc) idle_init_helper, gpu_offload_helper); } g_once_init_leave (&once_init_value, 1); } return gpu_offload_helper; } /** * xapp_gpu_offload_helper_get: * * Creates a new #XAppGpuOffloadHelper instance. * * The #XAppGpuOffloadHelper::ready signal will be emitted when the helper is initialized (successfully or not). * * Returns: (transfer none): a new #XAppGpuOffloadHelper. * * Since: 2.6 */ XAppGpuOffloadHelper * xapp_gpu_offload_helper_get (void) { return helper_get_common (FALSE); } /** * xapp_gpu_offload_helper_get_sync: * * Creates a new #XAppGpuOffloadHelper instance. This performs initialization synchronously, * and can potentially block. * * Use xapp_gpu_offload_helper_is_ready() to see if the helper was initialized successfully. * * Returns: (transfer none): a new #XAppGpuOffloadHelper, fully initialized. * * Since: 2.6 */ XAppGpuOffloadHelper * xapp_gpu_offload_helper_get_sync (void) { return helper_get_common (TRUE); } static void warn_if_not_ready (XAppGpuOffloadHelper *helper) { if (!helper->ready) { g_warning ("Helper not initialized or failed to do so."); } } /** * xapp_gpu_offload_helper_is_ready: * @helper: The #XAppGpuOffloadHelper. * * Checks if the helper is ready and valid. This does not mean * offload support exists. * * Returns: %TRUE if the helper has been successfully initialized. * * Since: 2.6 */ gboolean xapp_gpu_offload_helper_is_ready (XAppGpuOffloadHelper *helper) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), 1); return helper->ready; } /** * xapp_gpu_offload_helper_is_offload_supported: * @helper: The #XAppGpuOffloadHelper. * * Checks if there is a non-default GPU available for offloading. * * Returns: %TRUE if there is an extra GPU available. * * Since: 2.6 */ gboolean xapp_gpu_offload_helper_is_offload_supported (XAppGpuOffloadHelper *helper) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), 1); return helper->num_gpus > 1; } /** * xapp_gpu_offload_helper_get_n_gpus: * @helper: The #XAppGpuOffloadHelper. * * Gets the number of GPUs noticed by Switcheroo. * * Returns: the total number of GPUs. A return value larger than * 1 implies there are offloadable GPUs available. * * Since: 2.6 */ gint xapp_gpu_offload_helper_get_n_gpus (XAppGpuOffloadHelper *helper) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), 1); warn_if_not_ready (helper); return helper->num_gpus; } /** * xapp_gpu_offload_helper_get_offload_infos: * @helper: The #XAppGpuOffloadHelper. * * Generates a list of #XAppGpuInfos that can be offloaded to, if there are any. * * Returns: (element-type XAppGpuInfo) (transfer container): a list of #XAppGpuInfos or %NULL if there is only * a single GPU. The elements are owned by @helper but the container itself should be freed. * * Since: 2.6 */ GList * xapp_gpu_offload_helper_get_offload_infos (XAppGpuOffloadHelper *helper) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), NULL); warn_if_not_ready (helper); GList *retval = NULL; GList *l; for (l = helper->gpu_infos; l != NULL; l = l->next) { XAppGpuInfo *info = l->data; if (info->is_default) continue; retval = g_list_append (retval, info); } return retval; } /** * xapp_gpu_offload_helper_get_default_info: * @helper: The #XAppGpuOffloadHelper. * * Returns an #XAppGpuInfo for the default GPU. * * Returns: (transfer none): the default #XAppGpuInfo. Do not free * * Since: 2.6 */ XAppGpuInfo * xapp_gpu_offload_helper_get_default_info (XAppGpuOffloadHelper *helper) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), NULL); warn_if_not_ready (helper); GList *l; for (l = helper->gpu_infos; l != NULL; l = l->next) { XAppGpuInfo *info = l->data; if (info->is_default) return info; } g_warning ("No default GPU found by switcheroo!"); return NULL; } /** * xapp_gpu_offload_helper_get_info_by_id: * @helper: The #XAppGpuOffloadHelper. * @id: The ID of the info to retrieve. * * Returns an #XAppGpuInfo with the given ID. * * Returns: (transfer none): the appropriate #XAppGpuInfo, or %NULL if @id was invalid. * * Since: 2.6 */ XAppGpuInfo * xapp_gpu_offload_helper_get_info_by_id (XAppGpuOffloadHelper *helper, gint id) { g_return_val_if_fail (XAPP_IS_GPU_OFFLOAD_HELPER (helper), NULL); warn_if_not_ready (helper); GList *l; for (l = helper->gpu_infos; l != NULL; l = l->next) { XAppGpuInfo *info = l->data; if (info->id == id) return info; } g_warning ("No GPU with id %d found.", id); return NULL; } xapp-2.8.8/libxapp/xapp-gtk3-module.c0000664000175000017500000001374714736763051016361 0ustar fabiofabio#include #include #include "xapp-favorites.h" #include "favorite-vfs-file.h" #define DEBUG_FLAG XAPP_DEBUG_MODULE #include "xapp-debug.h" #define ICON_OVERRIDE_VAR "XAPP_FORCE_GTKWINDOW_ICON" /* xapp-gtk3-module: * * - Initializes the favorites:// vfs and adds a Favorites shortcut * to any gtk3 sidebars (like in file dialogs). * * - Overrides the window icon for any GtkWindows when an environment * variable is set with an icon path or name. */ void gtk_module_init (gint *argc, gchar ***argv[]); static void (* original_sidebar_constructed) (GObject *object); static void (* original_window_realize) (GtkWidget *widget); static void (* original_window_unrealize) (GtkWidget *widget); static void on_sidebar_realized (GtkWidget *widget, gpointer data) { GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (widget); GSettings *fav_settings; gchar **list; // This is better than initializing favorites to count. // That way if there aren't any favorites, fav_settings // will go away. XAppFavorites is a singleton. fav_settings = g_settings_new ("org.x.apps.favorites"); list = g_settings_get_strv (fav_settings, "list"); if (g_strv_length (list) > 0) { GFile *favorites = g_file_new_for_uri ("favorites:///"); gtk_places_sidebar_add_shortcut (sidebar, favorites); g_object_unref (favorites); } g_strfreev (list); g_object_unref (fav_settings); g_signal_handlers_disconnect_by_func (widget, on_sidebar_realized, NULL); } static void xapp_sidebar_constructed (GObject *object) { (* original_sidebar_constructed) (object); g_signal_connect (object, "realize", G_CALLBACK (on_sidebar_realized), NULL); } static void window_icon_changed (GtkWindow *window) { const gchar *forced_icon_str; gpointer anti_recursion_ptr; forced_icon_str = g_object_get_data (G_OBJECT (window), "xapp-forced-window-icon"); anti_recursion_ptr = g_object_get_data (G_OBJECT (window), "xapp-forced-icon-last-icon-ptr"); if (anti_recursion_ptr && anti_recursion_ptr == gtk_window_get_icon (window)) { DEBUG ("Window icon notify received, but anti-recurse pointer hasn't changed, returning."); return; } if (forced_icon_str != NULL) { gboolean clear_pixbuf = FALSE; DEBUG ("Window icon changed, forcing back to '%s'", forced_icon_str); g_signal_handlers_block_by_func (G_OBJECT (window), window_icon_changed, window); if (g_path_is_absolute (forced_icon_str)) { gtk_window_set_icon_name (window, NULL); gtk_window_set_icon_from_file (window, forced_icon_str, NULL); } else { gtk_window_set_icon (window, NULL); gtk_window_set_icon_name (window, forced_icon_str); clear_pixbuf = TRUE; } g_object_set_data_full (G_OBJECT (window), "xapp-forced-icon-last-icon-ptr", clear_pixbuf ? NULL : g_object_ref (gtk_window_get_icon (window)), g_object_unref); g_signal_handlers_unblock_by_func (G_OBJECT (window), window_icon_changed, window); } } static void overridden_window_realize (GtkWidget *widget) { (* original_window_realize) (widget); if (g_object_get_data (G_OBJECT (widget), "xapp-module-window-seen")) { return; } g_object_set_data (G_OBJECT (widget), "xapp-module-window-seen", GINT_TO_POINTER (1)); DEBUG ("Realize overridden window (%p).", widget); const gchar *env_icon = g_getenv (ICON_OVERRIDE_VAR); if (env_icon != NULL) { g_object_set_data_full (G_OBJECT (widget), "xapp-forced-window-icon", g_strdup (env_icon), g_free); window_icon_changed (GTK_WINDOW (widget)); g_signal_connect_swapped (widget, "notify::icon", G_CALLBACK (window_icon_changed), widget); g_signal_connect_swapped (widget, "notify::icon-name", G_CALLBACK (window_icon_changed), widget); } } static void overridden_window_unrealize (GtkWidget *widget) { (* original_window_unrealize) (widget); DEBUG ("Unrealize overridden window (%p).", widget); g_signal_handlers_disconnect_by_func (widget, window_icon_changed, widget); } static void apply_window_icon_override (void) { static gboolean applied = 0; // I don't think these guards are necessary. This should only run once, but better off safe. if (!applied) { DEBUG ("XAPP_FORCE_GTKWINDOW_ICON found in environment, overriding the window icon with its contents"); applied = TRUE; GtkWidgetClass *widget_class; widget_class = g_type_class_ref (GTK_TYPE_WINDOW); original_window_realize = widget_class->realize; widget_class->realize = overridden_window_realize; original_window_unrealize = widget_class->unrealize; widget_class->unrealize = overridden_window_unrealize; } } static void apply_sidebar_favorites_override (void) { static gboolean applied = 0; if (!applied) { DEBUG ("Adding a Favorites shortcut to GtkPlacesSideBars"); applied = TRUE; GObjectClass *object_class; object_class = g_type_class_ref (GTK_TYPE_PLACES_SIDEBAR); original_sidebar_constructed = object_class->constructed; object_class->constructed = xapp_sidebar_constructed; } } G_MODULE_EXPORT void gtk_module_init (gint *argc, gchar ***argv[]) { DEBUG ("Initializing XApp GtkModule"); // This won't instantiate XAppFavorites but will register the uri so // it can be used by apps (like pix which doesn't use the favorites api, // but just adds favorites:/// to its sidebar.) init_favorite_vfs (); apply_sidebar_favorites_override (); if (g_getenv (ICON_OVERRIDE_VAR) != NULL) { apply_window_icon_override (); } } G_MODULE_EXPORT gchar* g_module_check_init (GModule *module); G_MODULE_EXPORT gchar* g_module_check_init (GModule *module) { g_module_make_resident(module); return NULL; } xapp-2.8.8/libxapp/favorite-vfs-file.h0000664000175000017500000000165714736763051016612 0ustar fabiofabio#ifndef FAVORITE_VFS_FILE_H #define FAVORITE_VFS_FILE_H #include "xapp-favorites.h" #include #include G_BEGIN_DECLS #define FAVORITE_TYPE_VFS_FILE (favorite_vfs_file_get_type ()) G_DECLARE_FINAL_TYPE (FavoriteVfsFile, favorite_vfs_file, \ FAVORITE, VFS_FILE, GObject) // Initializer for favorites:/// - called when the XAppFavorites singleton is created void init_favorite_vfs (void); GFile *favorite_vfs_file_new_for_uri (const char *uri); gchar *favorite_vfs_file_get_real_uri (GFile *file); #define URI_SCHEME "favorites" #define ROOT_URI ("favorites:///") #define FAVORITE_METADATA_KEY "metadata::xapp-favorite" #define FAVORITE_AVAILABLE_METADATA_KEY "metadata::xapp-favorite-available" #define META_TRUE "true" #define META_FALSE "false" gchar *path_to_fav_uri (const gchar *path); gchar *fav_uri_to_display_name (const gchar *uri); G_END_DECLS #endif // FAVORITE_VFS_FILE_H xapp-2.8.8/libxapp/favorite-vfs-file-monitor.h0000664000175000017500000000073614736763051020274 0ustar fabiofabio#ifndef __FAVORITE_VFS_FILE_MONITOR_H__ #define __FAVORITE_VFS_FILE_MONITOR_H__ #include #include G_BEGIN_DECLS #define FAVORITE_TYPE_VFS_FILE_MONITOR (favorite_vfs_file_monitor_get_type ()) G_DECLARE_FINAL_TYPE (FavoriteVfsFileMonitor, favorite_vfs_file_monitor, FAVORITE, VFS_FILE_MONITOR, GFileMonitor) GFileMonitor *favorite_vfs_file_monitor_new (void); G_END_DECLS #endif /* __FAVORITE_VFS_FILE_MONITOR_H__ */ xapp-2.8.8/libxapp/xapp-gtk-window.c0000664000175000017500000005662714736763051016324 0ustar fabiofabio #include #include #include #include #include #include #include #include #include "xapp-gtk-window.h" #define DEBUG_FLAG XAPP_DEBUG_WINDOW #include "xapp-debug.h" #define ICON_NAME_HINT "_NET_WM_XAPP_ICON_NAME" #define PROGRESS_HINT "_NET_WM_XAPP_PROGRESS" #define PROGRESS_PULSE_HINT "_NET_WM_XAPP_PROGRESS_PULSE" /** * SECTION:xapp-gtk-window * @Short_description: A subclass of %GtkWindow that allows additional communication with the window manager. * @Title: XAppGtkWindow * * This widget is a simple subclass of GtkWindow that provides the following * additional capabilities: * * - Ability to set an icon name or icon file path for the window manager to * make use of, rather than relying on a desktop file or fixed-size window- * backed icon that Gtk normally generates. The window manager must support * the NET_WM_XAPP_ICON_NAME hint. * * - Ability to send progress info to the window manager, in the form of an integer, * 0-100, which can then be used to display this progress in some manner in a task * manager or window list. The window manager must support the NET_WM_XAPP_PROGRESS * hint. * * - Ability to signal a 'pulsing' progress state, of potentially indeterminate value, * in the form of a boolean, which can be passed on to a window list. The window * manager must support the NET_WM_XAPP_PROGRESS_PULSE hint * * Wrappers: * * Also provided are corresponding wrapper functions for normal GtkWindows. * They are not class methods - they are called with the target widget as their first * argument. * * For example: * * win = Gtk.Window() * XApp.set_window_icon_name(win, "foobar") * * These functions mirror those of the #XAppGtkWindow class, but allow the properties * to work with normal GtkWindows and descendants of GtkWindow. */ typedef struct { gchar *icon_name; gchar *icon_path; guint progress; gboolean progress_pulse; } XAppGtkWindowPrivate; G_DEFINE_TYPE_WITH_PRIVATE (XAppGtkWindow, xapp_gtk_window, GTK_TYPE_WINDOW) static gboolean is_x11_session (void) { static gboolean running_x11 = FALSE; static gsize once_init_value = 0; if (g_once_init_enter (&once_init_value)) { running_x11 = GDK_IS_X11_DISPLAY(gdk_display_get_default()); DEBUG ("XAppGtkWindow: is_x11_session: %s\n", running_x11 ? "TRUE" : "FALSE"); g_once_init_leave (&once_init_value, 1); } return running_x11; } static void clear_icon_strings (XAppGtkWindowPrivate *priv) { g_clear_pointer (&priv->icon_name, g_free); g_clear_pointer (&priv->icon_path, g_free); } static void set_window_hint_utf8 (Window xid, const gchar *atom_name, const gchar *str) { GdkDisplay *display; display = gdk_display_get_default (); if (str != NULL) { XChangeProperty (GDK_DISPLAY_XDISPLAY (display), xid, gdk_x11_get_xatom_by_name_for_display (display, atom_name), gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING"), 8, PropModeReplace, (guchar *) str, strlen (str)); } else { XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), xid, gdk_x11_get_xatom_by_name_for_display (display, atom_name)); } } static void set_window_hint_cardinal (Window xid, const gchar *atom_name, gulong cardinal) { GdkDisplay *display; display = gdk_display_get_default (); gdk_error_trap_push (); if (cardinal > 0) { XChangeProperty (GDK_DISPLAY_XDISPLAY (display), xid, gdk_x11_get_xatom_by_name_for_display (display, atom_name), XA_CARDINAL, 32, PropModeReplace, (guchar *) &cardinal, 1); } else { XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), xid, gdk_x11_get_xatom_by_name_for_display (display, atom_name)); } gdk_error_trap_pop_ignored (); } static Window get_window_xid (GtkWindow *window) { GdkWindow *gdk_window; gdk_window = gtk_widget_get_window (GTK_WIDGET (window)); if (gdk_window_get_effective_toplevel (gdk_window) != gdk_window) { g_warning ("Window is not toplevel"); return 0; } return GDK_WINDOW_XID (gdk_window); } static void update_window_icon (GtkWindow *window, XAppGtkWindowPrivate *priv) { if (!is_x11_session ()) { return; } /* Icon name/path */ if (priv->icon_name != NULL) { set_window_hint_utf8 (get_window_xid (window), ICON_NAME_HINT, priv->icon_name); } else if (priv->icon_path != NULL) { set_window_hint_utf8 (get_window_xid (window), ICON_NAME_HINT, priv->icon_path); } else { set_window_hint_utf8 (get_window_xid (window), ICON_NAME_HINT, NULL); } } static void update_window_progress (GtkWindow *window, XAppGtkWindowPrivate *priv) { if (!is_x11_session ()) { return; } /* Progress: 0 - 100 */ set_window_hint_cardinal (get_window_xid (window), PROGRESS_HINT, (gulong) priv->progress); set_window_hint_cardinal (get_window_xid (window), PROGRESS_PULSE_HINT, (gulong) (priv->progress_pulse ? 1 : 0)); } static void set_icon_name_internal (GtkWindow *window, XAppGtkWindowPrivate *priv, const gchar *icon_name) { if (g_strcmp0 (icon_name, priv->icon_name) == 0) { gtk_window_set_icon_name (window, icon_name); return; } /* Clear both strings when either is set - this ensures the * correct value is set during update_window() */ clear_icon_strings (priv); if (icon_name != NULL) { priv->icon_name = g_strdup (icon_name); } /* If the window is realized, set the icon name immediately. * If it's not, it will be set by xapp_gtk_window_realize(). */ if (gtk_widget_get_realized (GTK_WIDGET (window))) { update_window_icon (window, priv); } /* Call the GtkWindow method for compatibility */ gtk_window_set_icon_name (GTK_WINDOW (window), icon_name); } static void set_icon_from_file_internal (GtkWindow *window, XAppGtkWindowPrivate *priv, const gchar *file_name, GError **error) { if (g_strcmp0 (file_name, priv->icon_path) == 0) { gtk_window_set_icon_from_file (window, file_name, error); return; } /* Clear both strings when either is set - this ensures the correct * value is set during update_window() */ clear_icon_strings (priv); if (file_name != NULL) { priv->icon_path = g_strdup (file_name); } /* If the window is realized, set the icon path immediately. * If it's not, it will be set by xapp_gtk_window_realize(). */ if (gtk_widget_get_realized (GTK_WIDGET (window))) { update_window_icon (window, priv); } gtk_window_set_icon_from_file (GTK_WINDOW (window), file_name, error); } static void set_progress_internal (GtkWindow *window, XAppGtkWindowPrivate *priv, gint progress) { gboolean update; guint clamped_progress; update = FALSE; if (priv->progress_pulse) { priv->progress_pulse = FALSE; update = TRUE; } clamped_progress = CLAMP (progress, 0, 100); if (clamped_progress != priv->progress) { priv->progress = clamped_progress; update = TRUE; } /* If the window is realized, set the progress immediately. * If it's not, it will be set by xapp_gtk_window_realize(). */ if (gtk_widget_get_realized (GTK_WIDGET (window))) { if (update) { update_window_progress (window, priv); } } } static void set_progress_pulse_internal (GtkWindow *window, XAppGtkWindowPrivate *priv, gboolean pulse) { gboolean update; update = FALSE; if (priv->progress_pulse != pulse) { priv->progress_pulse = pulse; update = TRUE; } /* If the window is realized, set the progress immediately. * If it's not, it will be set by xapp_gtk_window_realize(). */ if (gtk_widget_get_realized (GTK_WIDGET (window))) { if (update) { update_window_progress (window, priv); } } } static void xapp_gtk_window_realize (GtkWidget *widget) { XAppGtkWindow *window = XAPP_GTK_WINDOW (widget); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); GTK_WIDGET_CLASS (xapp_gtk_window_parent_class)->realize (widget); update_window_icon (GTK_WINDOW (window), priv); update_window_progress (GTK_WINDOW (window), priv); } static void xapp_gtk_window_unrealize (GtkWidget *widget) { GTK_WIDGET_CLASS (xapp_gtk_window_parent_class)->unrealize (widget); } static void xapp_gtk_window_finalize (GObject *object) { XAppGtkWindow *window = XAPP_GTK_WINDOW (object); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); clear_icon_strings (priv); G_OBJECT_CLASS (xapp_gtk_window_parent_class)->finalize (object); } static void xapp_gtk_window_init (XAppGtkWindow *window) { XAppGtkWindowPrivate *priv; priv = xapp_gtk_window_get_instance_private (window); priv->icon_name = NULL; priv->icon_path = NULL; } static void xapp_gtk_window_class_init (XAppGtkWindowClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *wclass = GTK_WIDGET_CLASS (klass); gobject_class->finalize = xapp_gtk_window_finalize; wclass->realize = xapp_gtk_window_realize; wclass->unrealize = xapp_gtk_window_unrealize; } /** * xapp_gtk_window_new: * @type: The #GtkWindowType to use * * Creates a new #XAppGtkWindow of type @type. See gtk_window_new() * for more details. * * Returns: A new #XAppGtkWindow (transfer: full) */ GtkWidget * xapp_gtk_window_new (GtkWindowType type) { return g_object_new (XAPP_TYPE_GTK_WINDOW, "type", type, NULL); } /** * xapp_gtk_window_set_icon_name: * @window: The #XAppGtkWindow to set the icon name for * @icon_name: (nullable): The icon name or path to set, or %NULL to unset. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This also chains up and calls GtkWindow.set_icon_name * for convenience and compatibility. Set to %NULL to unset. */ void xapp_gtk_window_set_icon_name (XAppGtkWindow *window, const gchar *icon_name) { g_return_if_fail (XAPP_IS_GTK_WINDOW (window)); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); set_icon_name_internal (GTK_WINDOW (window), priv, icon_name); } /** * xapp_gtk_window_set_icon_from_file: * @window: The #XAppGtkWindow to set the icon name for * @file_name: (nullable): The icon path to set, or %NULL to unset. * @error: (nullable): An error to set if something goes wrong. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This also chains up and calls GtkWindow.set_icon_from_file * for convenience and compatibility. Set to %NULL to unset. */ void xapp_gtk_window_set_icon_from_file (XAppGtkWindow *window, const gchar *file_name, GError **error) { g_return_if_fail (XAPP_IS_GTK_WINDOW (window)); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); set_icon_from_file_internal (GTK_WINDOW (window), priv, file_name, error); } /** * xapp_gtk_window_set_progress: * @window: The #XAppGtkWindow to set the progress for * @progress: The value to set for progress. * * Sets the progress hint for a window manager (like muffin) to make * available when applications want to display the application's progress * in some operation. The value sent to the WM will be clamped to * between 0 and 100. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. * * Setting progress will also cancel the 'pulsing' flag on the window as * well, if it has been set. */ void xapp_gtk_window_set_progress (XAppGtkWindow *window, gint progress) { g_return_if_fail (XAPP_IS_GTK_WINDOW (window)); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); set_progress_internal (GTK_WINDOW (window), priv, progress); } /** * xapp_gtk_window_set_progress_pulse: * @window: The #XAppGtkWindow to set the progress for * @pulse: Whether to have pulsing set or not. * * Sets the progress pulse hint hint for a window manager (like muffin) * to make available when applications want to display indeterminate or * ongoing progress in a task manager. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. This will also remove the pulse state, if it is set. * * Setting an explicit progress value will unset this flag. */ void xapp_gtk_window_set_progress_pulse (XAppGtkWindow *window, gboolean pulse) { g_return_if_fail (XAPP_IS_GTK_WINDOW (window)); XAppGtkWindowPrivate *priv = xapp_gtk_window_get_instance_private (window); set_progress_pulse_internal (GTK_WINDOW (window), priv, pulse); } /* Wrappers (for GtkWindow subclasses like GtkDialog) * window must be a GtkWindow or descendant */ static void on_gtk_window_realized (GtkWidget *widget, gpointer user_data) { XAppGtkWindowPrivate *priv; priv = (XAppGtkWindowPrivate *) user_data; update_window_icon (GTK_WINDOW (widget), priv); update_window_progress (GTK_WINDOW (widget), priv); } static void destroy_xapp_struct (gpointer user_data) { XAppGtkWindowPrivate *priv = (XAppGtkWindowPrivate *) user_data; g_clear_pointer (&priv->icon_name, g_free); g_clear_pointer (&priv->icon_path, g_free); g_slice_free (XAppGtkWindowPrivate, priv); } static XAppGtkWindowPrivate * get_xapp_struct (GtkWindow *window) { XAppGtkWindowPrivate *priv; priv = g_object_get_data (G_OBJECT (window), "xapp-window-struct"); if (priv) { return priv; } priv = g_slice_new0 (XAppGtkWindowPrivate); g_object_set_data_full (G_OBJECT (window), "xapp-window-struct", priv, (GDestroyNotify) destroy_xapp_struct); g_signal_connect_after (GTK_WIDGET (window), "realize", G_CALLBACK (on_gtk_window_realized), priv); return priv; } /** * xapp_set_window_icon_name: * @window: The #GtkWindow to set the icon name for * @icon_name: (nullable): The icon name to set, or %NULL to unset. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This is a function, not a method, for taking * advantage of this feature with descendants of GtkWindows, such as * GtkDialogs. Sets gtk_window_set_icon_name as well, to avoid needing * to have two calls each time. Set to %NULL to unset. */ void xapp_set_window_icon_name (GtkWindow *window, const gchar *icon_name) { XAppGtkWindowPrivate *priv; g_return_if_fail (GTK_IS_WINDOW (window)); priv = get_xapp_struct (window); if (XAPP_IS_GTK_WINDOW (window)) { g_warning("Window is an instance of XAppGtkWindow. Use the instance set_icon_name method instead."); } set_icon_name_internal (window, priv, icon_name); } /** * xapp_set_window_icon_from_file: * @window: The #GtkWindow to set the icon name for * @file_name: (nullable): The icon path to set, or %NULL to unset. * @error: (nullable): An error to set if something goes wrong. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This also chains up and calls GtkWindow.set_icon_from_file * for convenience and compatibility. Set to %NULL to unset. */ void xapp_set_window_icon_from_file (GtkWindow *window, const gchar *file_name, GError **error) { XAppGtkWindowPrivate *priv; g_return_if_fail (GTK_IS_WINDOW (window)); priv = get_xapp_struct (window); if (XAPP_IS_GTK_WINDOW (window)) { g_warning("Window is an instance of XAppGtkWindow. Use the instance set_icon_from_file method instead."); } set_icon_from_file_internal (window, priv, file_name, error); } /** * xapp_set_window_progress: * @window: The #GtkWindow to set the progress for * @progress: The value to set for progress. * * Sets the progress hint for a window manager (like muffin) to make * available when applications want to display the application's progress * in some operation. The value sent to the WM will be clamped to * between 0 and 100. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. * * Setting progress will also cancel the 'pulsing' flag on the window as * well, if it has been set. */ void xapp_set_window_progress (GtkWindow *window, gint progress) { XAppGtkWindowPrivate *priv; g_return_if_fail (GTK_IS_WINDOW (window)); priv = get_xapp_struct (window); if (XAPP_IS_GTK_WINDOW (window)) { g_warning("Window is an instance of XAppGtkWindow. Use the instance set_progress method instead."); } set_progress_internal (window, priv, progress); } /** * xapp_set_window_progress_pulse: * @window: The #GtkWindow to set the progress for * @pulse: Whether to have pulsing set or not. * * Sets the progress pulse hint hint for a window manager (like muffin) * to make available when applications want to display indeterminate or * ongoing progress in a task manager. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. This will also remove the pulse state, if it is set. * * Setting an explicit progress value will unset this flag. */ void xapp_set_window_progress_pulse (GtkWindow *window, gboolean pulse) { XAppGtkWindowPrivate *priv; g_return_if_fail (GTK_IS_WINDOW (window)); priv = get_xapp_struct (window); if (XAPP_IS_GTK_WINDOW (window)) { g_warning("Window is an instance of XAppGtkWindow. Use the instance set_progress_pulse method instead."); } set_progress_pulse_internal (GTK_WINDOW (window), priv, pulse); } /** * xapp_set_xid_icon_name: * @xid: The Window to set the icon name for * @icon_name: (nullable): The icon name to set, or %NULL to unset. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This is a function, not a method, for applying * the icon name property for a given (possibly foreign) window, by passing * the window's XID. Set to %NULL to unset. */ void xapp_set_xid_icon_name (gulong xid, const gchar *icon_name) { g_return_if_fail (xid > 0); set_window_hint_utf8 (xid, ICON_NAME_HINT, icon_name); } /** * xapp_set_xid_icon_from_file: * @xid: The Window to set the icon name for * @file_name: (nullable): The icon path to set, or %NULL to unset. * * Sets the icon name hint for a window manager (like muffin) to make * available when applications want to change their icons during runtime * without having to resort to the internal low-res pixbufs that GdkWindow * sets on the client side. This is a function, not a method, for applying * the icon name property for a given (possibly foreign) window, by passing * the window's XID. Set to %NULL to unset. */ void xapp_set_xid_icon_from_file (gulong xid, const gchar *file_name) { g_return_if_fail (xid > 0); set_window_hint_utf8 (xid, ICON_NAME_HINT, file_name); } /** * xapp_set_xid_progress: * @xid: The Window to set the progress for * @progress: The value to set for progress. * * Sets the progress hint for a window manager (like muffin) to make * available when applications want to display the application's progress * in some operation. The value sent to the WM will be clamped to * between 0 and 100. * * Setting progress will also cancel the 'pulsing' flag on the window as * well, if it has been set. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. * * This is a function, not a method, for applying the progress property for * a given (possibly foreign) window, by passing the window's XID. */ void xapp_set_xid_progress (gulong xid, gint progress) { g_return_if_fail (xid > 0); set_window_hint_cardinal (xid, PROGRESS_HINT, (gulong) (CLAMP (progress, 0, 100))); set_window_hint_cardinal (xid, PROGRESS_PULSE_HINT, (gulong) 0); } /** * xapp_set_xid_progress_pulse: * @xid: The Window to set the progress for * @pulse: Whether to have pulsing set or not. * * Sets the progress pulse hint hint for a window manager (like muffin) * to make available when applications want to display indeterminate or * ongoing progress in a task manager. * * Note: If a window will stick around after progress is complete, you will * probably need to set progress to 0 to remove any progress effects on taskbars * and window lists. * * Setting an explicit progress value will unset this flag. */ void xapp_set_xid_progress_pulse (gulong xid, gboolean pulse) { g_return_if_fail (xid > 0); set_window_hint_cardinal (xid, PROGRESS_PULSE_HINT, (gulong) (pulse ? 1 : 0)); } xapp-2.8.8/libxapp/org.x.StatusIcon.xml0000664000175000017500000000311514736763051016752 0ustar fabiofabio xapp-2.8.8/libxapp/xapp-stack-sidebar.h0000664000175000017500000000107414736763051016735 0ustar fabiofabio#ifndef _XAPP_STACK_SIDEBAR_H_ #define _XAPP_STACK_SIDEBAR_H_ #include #include G_BEGIN_DECLS #define XAPP_TYPE_STACK_SIDEBAR (xapp_stack_sidebar_get_type ()) G_DECLARE_FINAL_TYPE (XAppStackSidebar, xapp_stack_sidebar, XAPP, STACK_SIDEBAR, GtkBin) XAppStackSidebar *xapp_stack_sidebar_new (void); void xapp_stack_sidebar_set_stack (XAppStackSidebar *sidebar, GtkStack *stack); GtkStack *xapp_stack_sidebar_get_stack (XAppStackSidebar *sidebar); G_END_DECLS #endif /*_XAPP_STACK_SIDEBAR_H_ */ xapp-2.8.8/libxapp/xapp-debug.h0000664000175000017500000000426114736763051015310 0ustar fabiofabio/* * xapp-debug: debug loggers for xapp * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * Copyright (C) 2010 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Copied from nemo */ #ifndef __XAPP_DEBUG_H__ #define __XAPP_DEBUG_H__ #include #include G_BEGIN_DECLS #ifdef ENABLE_DEBUG typedef enum { XAPP_DEBUG_WINDOW = 1 << 1, XAPP_DEBUG_FAVORITES = 1 << 2, XAPP_DEBUG_FAVORITE_VFS = 1 << 3, XAPP_DEBUG_STATUS_ICON = 1 << 4, XAPP_DEBUG_SN_WATCHER = 1 << 5, XAPP_DEBUG_MODULE = 1 << 6, XAPP_DEBUG_VISIBILITY_GROUP = 1 << 7, XAPP_DEBUG_GPU_OFFLOAD = 1 << 8, XAPP_DEBUG_DARK_MODE_MANAGER = 1 << 9 } DebugFlags; void xapp_debug_set_flags (DebugFlags flags); gboolean xapp_debug_flag_is_set (DebugFlags flag); const gchar *debug_flag_to_string (DebugFlags flag); void xapp_debug_valist (DebugFlags flag, const gchar *format, va_list args); void xapp_debug (DebugFlags flag, const gchar *format, ...) G_GNUC_PRINTF (2, 3); #ifdef DEBUG_FLAG #define DEBUG(format, ...) \ xapp_debug (DEBUG_FLAG, "(%s) %s: %s: " format, debug_flag_to_string (DEBUG_FLAG), G_STRFUNC, G_STRLOC, \ ##__VA_ARGS__) #define DEBUGGING xapp_debug_flag_is_set(DEBUG_FLAG) #endif /* DEBUG_FLAG */ #else /* ENABLE_DEBUG */ #ifdef DEBUG_FLAG #define DEBUG(format, ...) \ G_STMT_START { } G_STMT_END #define DEBUGGING 0 #endif /* DEBUG_FLAG */ #endif /* ENABLE_DEBUG */ G_END_DECLS #endif /* __XAPP_DEBUG_H__ */ xapp-2.8.8/libxapp/xapp-icon-chooser-button.c0000664000175000017500000003047414736763051020123 0ustar fabiofabio#include #include "xapp-icon-chooser-button.h" #include #define XAPP_BUTTON_ICON_SIZE_DEFAULT GTK_ICON_SIZE_DIALOG /** * SECTION:xapp-icon-chooser-button * @Short_description: A button for selecting an icon * @Title: XAppIconChooserButton * * The XAppIconChooserButton creates a button so that * the user can select an icon. When the button is clicked * it will open an XAppIconChooserDialog. The currently * selected icon will be displayed as the button image. */ typedef struct { GtkWidget *image; XAppIconChooserDialog *dialog; GtkIconSize icon_size; gchar *icon_string; gchar *category_string; } XAppIconChooserButtonPrivate; struct _XAppIconChooserButton { GtkButton parent_instance; }; enum { PROP_0, PROP_ICON_SIZE, PROP_ICON, PROP_CATEGORY, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; G_DEFINE_TYPE_WITH_PRIVATE (XAppIconChooserButton, xapp_icon_chooser_button, GTK_TYPE_BUTTON) static void ensure_dialog (XAppIconChooserButton *button) { XAppIconChooserButtonPrivate *priv; priv = xapp_icon_chooser_button_get_instance_private (button); if (priv->dialog != NULL) { return; } priv->dialog = xapp_icon_chooser_dialog_new (); } static void on_clicked (GtkButton *button) { XAppIconChooserButtonPrivate *priv; GtkResponseType response; GtkWidget *toplevel; toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); priv = xapp_icon_chooser_button_get_instance_private (XAPP_ICON_CHOOSER_BUTTON (button)); ensure_dialog (XAPP_ICON_CHOOSER_BUTTON (button)); gtk_window_set_transient_for (GTK_WINDOW (priv->dialog), GTK_WINDOW (toplevel)); gtk_window_set_modal (GTK_WINDOW (priv->dialog), gtk_window_get_modal (GTK_WINDOW (toplevel))); if (priv->category_string) { response = xapp_icon_chooser_dialog_run_with_category (priv->dialog, priv->category_string); } else if (priv->icon_string) { response = xapp_icon_chooser_dialog_run_with_icon (priv->dialog, priv->icon_string); } else { response = xapp_icon_chooser_dialog_run (priv->dialog); } if (response == GTK_RESPONSE_OK) { gchar *icon; icon = xapp_icon_chooser_dialog_get_icon_string (priv->dialog); xapp_icon_chooser_button_set_icon (XAPP_ICON_CHOOSER_BUTTON (button), icon); } } void xapp_icon_chooser_button_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { XAppIconChooserButton *button; XAppIconChooserButtonPrivate *priv; button = XAPP_ICON_CHOOSER_BUTTON (object); priv = xapp_icon_chooser_button_get_instance_private (button); switch (prop_id) { case PROP_ICON_SIZE: g_value_set_enum (value, priv->icon_size); break; case PROP_ICON: g_value_set_string (value, priv->icon_string); break; case PROP_CATEGORY: g_value_set_string (value, priv->category_string); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } void xapp_icon_chooser_button_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { XAppIconChooserButton *button; button = XAPP_ICON_CHOOSER_BUTTON (object); switch (prop_id) { case PROP_ICON_SIZE: xapp_icon_chooser_button_set_icon_size (button, g_value_get_enum (value)); break; case PROP_ICON: xapp_icon_chooser_button_set_icon (button, g_value_get_string (value)); break; case PROP_CATEGORY: xapp_icon_chooser_button_set_default_category (button, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } void xapp_icon_chooser_button_dispose (GObject *object) { XAppIconChooserButtonPrivate *priv; priv = xapp_icon_chooser_button_get_instance_private (XAPP_ICON_CHOOSER_BUTTON (object)); g_clear_pointer (&priv->icon_string, g_free); g_clear_pointer (&priv->category_string, g_free); if (priv->dialog != NULL) { gtk_widget_destroy (GTK_WIDGET (priv->dialog)); priv->dialog = NULL; } G_OBJECT_CLASS (xapp_icon_chooser_button_parent_class)->dispose (object); } static void xapp_icon_chooser_button_init (XAppIconChooserButton *button) { XAppIconChooserButtonPrivate *priv; priv = xapp_icon_chooser_button_get_instance_private (button); priv->image = gtk_image_new_from_icon_name ("unknown", XAPP_BUTTON_ICON_SIZE_DEFAULT); gtk_button_set_image (GTK_BUTTON (button), priv->image); gtk_widget_set_hexpand (GTK_WIDGET (button), FALSE); gtk_widget_set_vexpand (GTK_WIDGET (button), FALSE); gtk_widget_set_halign (GTK_WIDGET (button), GTK_ALIGN_CENTER); gtk_widget_set_valign (GTK_WIDGET (button), GTK_ALIGN_CENTER); xapp_icon_chooser_button_set_icon_size (button, -1); priv->dialog = NULL; } static void xapp_icon_chooser_button_class_init (XAppIconChooserButtonClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkButtonClass *button_class = GTK_BUTTON_CLASS (klass); object_class->get_property = xapp_icon_chooser_button_get_property; object_class->set_property = xapp_icon_chooser_button_set_property; object_class->dispose = xapp_icon_chooser_button_dispose; button_class->clicked = on_clicked; /** * XAppIconChooserButton:icon-size: * * The size to use when displaying the icon. */ obj_properties[PROP_ICON_SIZE] = g_param_spec_enum ("icon-size", _("Icon size"), _("The preferred icon size."), GTK_TYPE_ICON_SIZE, GTK_ICON_SIZE_DND, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** * XAppIconChooserButton:icon: * * The preferred size to use when looking up icons. This only works with icon names. * Additionally, there is no guarantee that a selected icon name will exist in a * particular size. */ obj_properties[PROP_ICON] = g_param_spec_string ("icon", _("Icon"), _("The string representing the icon."), "", G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** * XAppIconChooserButton:category: * * The category selected by default. */ obj_properties[PROP_CATEGORY] = g_param_spec_string ("category", _("Category"), _("The default category."), "", G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, N_PROPERTIES, obj_properties); } /** * xapp_icon_chooser_button_new: * * Creates a new #XAppIconChooserButton and sets its icon to @icon. * * Returns: a newly created #XAppIconChooserButton */ XAppIconChooserButton * xapp_icon_chooser_button_new (void) { return g_object_new (XAPP_TYPE_ICON_CHOOSER_BUTTON, NULL); } /** * xapp_icon_chooser_button_new_with_size: * @icon_size: the size of icon to use in the button, or NULL to use the default value. * * Creates a new #XAppIconChooserButton, and sets the sizes of the button image and the icons in * the dialog. Note that xapp_icon_chooser_button_new_with_size (NULL, NULL) is the same as calling * xapp_icon_chooser_button_new (). * * Returns: a newly created #XAppIconChooserButton */ XAppIconChooserButton * xapp_icon_chooser_button_new_with_size (GtkIconSize icon_size) { XAppIconChooserButton *button; button = g_object_new (XAPP_TYPE_ICON_CHOOSER_BUTTON, NULL); xapp_icon_chooser_button_set_icon_size (button, icon_size); return button; } /** * xapp_icon_chooser_button_set_icon_size: * @button: a #XAppIconChooserButton * @icon_size: the size of icon to use in the button, or -1 to use the default value. * * Sets the icon size used in the button. */ void xapp_icon_chooser_button_set_icon_size (XAppIconChooserButton *button, GtkIconSize icon_size) { XAppIconChooserButtonPrivate *priv; gint width, height; gchar *icon; priv = xapp_icon_chooser_button_get_instance_private (button); if (icon_size == -1) { priv->icon_size = XAPP_BUTTON_ICON_SIZE_DEFAULT; } else { priv->icon_size = icon_size; } gtk_icon_size_lookup (priv->icon_size, &width, &height); gtk_image_set_pixel_size (GTK_IMAGE (priv->image), width); // We need to make sure the icon gets resized if it's a file path. Since // this means regenerating the pixbuf anyway, it's easier to just call // xapp_icon_chooser_button_set_icon, but we need to dup the string so // it doesn't get freed before it gets used. icon = g_strdup(priv->icon_string); xapp_icon_chooser_button_set_icon (button, icon); g_free (icon); g_object_notify (G_OBJECT (button), "icon-size"); } /** * xapp_icon_chooser_button_get_icon: * @button: a #XAppIconChooserButton * * Gets the icon from the #XAppIconChooserButton. * * returns: a string representing the icon. This may be an icon name or a file path. */ const gchar* xapp_icon_chooser_button_get_icon (XAppIconChooserButton *button) { XAppIconChooserButtonPrivate *priv; priv = xapp_icon_chooser_button_get_instance_private (button); return priv->icon_string; } /** * xapp_icon_chooser_button_set_icon: * @button: a #XAppIconChooserButton * @icon: (nullable): a string representing the icon to be set. This may be an icon name or a file path. * * Sets the icon on the #XAppIconChooserButton. */ void xapp_icon_chooser_button_set_icon (XAppIconChooserButton *button, const gchar *icon) { XAppIconChooserButtonPrivate *priv; const gchar *icon_string; priv = xapp_icon_chooser_button_get_instance_private (button); if (priv->icon_string != NULL) { g_free (priv->icon_string); } if (icon == NULL) { priv->icon_string = NULL; icon_string = "unknown"; } else { priv->icon_string = g_strdup (icon); icon_string = icon; } if (g_strrstr (icon_string, "/")) { GdkPixbuf *pixbuf; gint width, height; gtk_icon_size_lookup (priv->icon_size, &width, &height); pixbuf = gdk_pixbuf_new_from_file_at_size (icon_string, width, height, NULL); gtk_image_set_from_pixbuf (GTK_IMAGE (priv->image), pixbuf); } else { gtk_image_set_from_icon_name (GTK_IMAGE (priv->image), icon_string, priv->icon_size); } g_object_notify (G_OBJECT (button), "icon"); } /** * xapp_icon_chooser_button_set_default_category: * @button: a #XAppIconChooserButton * @category: (nullable): a string representing the category selected by default. * * Sets the icon on the #XAppIconChooserButton. */ void xapp_icon_chooser_button_set_default_category (XAppIconChooserButton *button, const gchar *category) { XAppIconChooserButtonPrivate *priv; priv = xapp_icon_chooser_button_get_instance_private (button); if (priv->category_string != NULL) { g_free (priv->category_string); } priv->category_string = g_strdup (category); } /** * xapp_icon_chooser_button_get_dialog: * @button: a #XAppIconChooserButton * * Gets a reference to the icon chooser dialog for the #XAppIconChooserButton. * This is useful for setting properties on the dialog. * * Returns: (transfer none): the #XAppIconChooserDialog */ XAppIconChooserDialog * xapp_icon_chooser_button_get_dialog (XAppIconChooserButton *button) { XAppIconChooserButtonPrivate *priv; ensure_dialog (button); priv = xapp_icon_chooser_button_get_instance_private (button); return priv->dialog; } xapp-2.8.8/libxapp/net.hadess.SwitcherooControl.xml0000664000175000017500000000312114736763051021341 0ustar fabiofabio xapp-2.8.8/libxapp/xapp-status-icon-monitor.h0000664000175000017500000000107014736763051020153 0ustar fabiofabio#ifndef __XAPP_STATUS_ICON_MONITOR_H__ #define __XAPP_STATUS_ICON_MONITOR_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_STATUS_ICON_MONITOR (xapp_status_icon_monitor_get_type ()) G_DECLARE_FINAL_TYPE (XAppStatusIconMonitor, xapp_status_icon_monitor, XAPP, STATUS_ICON_MONITOR, GObject) XAppStatusIconMonitor *xapp_status_icon_monitor_new (void); GList *xapp_status_icon_monitor_list_icons (XAppStatusIconMonitor *monitor); G_END_DECLS #endif /* __XAPP_STATUS_ICON_MONITOR_H__ */ xapp-2.8.8/libxapp/xapp-dark-mode-manager.c0000664000175000017500000002427614736763051017500 0ustar fabiofabio#include #include #include #include #include #include #include "xapp-dark-mode-manager.h" #define DEBUG_FLAG XAPP_DEBUG_DARK_MODE_MANAGER #include "xapp-debug.h" #define PORTAL_BUS_NAME "org.freedesktop.portal.Desktop" #define PORTAL_OBJECT_PATH "/org/freedesktop/portal/desktop" #define PORTAL_SETTINGS_INTERFACE "org.freedesktop.portal.Settings" #define PORTAL_ERROR_NOT_FOUND "org.freedesktop.portal.Error.NotFound" #define FALLBACK_SETTINGS "org.x.apps.portal" /** * SECTION:xapp-dark-mode-manager * @Short_description: Manages an application's dark mode preference for it. * @Title: XAppDarkModeManager * * This class will attempt to use the XDG Desktop Settings portal to manage its * 'gtk-application-prefer-dark-theme' setting. If the portal is unavailable it * will resort to using xdg-desktop-portal-xapp's dconf setting. * * Since 2.6 */ typedef enum { /* Aligns with the portal spec */ COLOR_SCHEME_DEFAULT, COLOR_SCHEME_PREFER_DARK, COLOR_SCHEME_PREFER_LIGHT, } ColorScheme; typedef struct { GDBusProxy *portal; GSettings *fallback_settings; gboolean app_prefers_dark; ColorScheme color_scheme; } XAppDarkModeManagerPrivate; struct _XAppDarkModeManager { GObject parent_instance; }; G_DEFINE_TYPE_WITH_PRIVATE (XAppDarkModeManager, xapp_dark_mode_manager, G_TYPE_OBJECT) static const gchar * color_scheme_name (ColorScheme scheme) { switch (scheme) { case COLOR_SCHEME_DEFAULT: return "Default"; case COLOR_SCHEME_PREFER_LIGHT: return "Prefer Light"; case COLOR_SCHEME_PREFER_DARK: return "Prefer Dark"; } return "unknown"; } static void update_gtk_settings (XAppDarkModeManager *manager) { XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); GtkSettings *gtk_settings = gtk_settings_get_default (); gboolean pref = priv->app_prefers_dark; switch (priv->color_scheme) { case COLOR_SCHEME_PREFER_LIGHT: pref = FALSE; break; case COLOR_SCHEME_PREFER_DARK: pref = TRUE; break; case COLOR_SCHEME_DEFAULT: default: break; } g_object_set (gtk_settings, "gtk-application-prefer-dark-theme", pref, NULL); } static void fallback_gsettings_changed_cb (gpointer user_data) { XAppDarkModeManager *manager = XAPP_DARK_MODE_MANAGER (user_data); XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); priv->color_scheme = g_settings_get_enum (priv->fallback_settings, "color-scheme"); DEBUG ("Fallback settings changed (color-scheme: %s)", color_scheme_name (priv->color_scheme)); update_gtk_settings (manager); } static void use_fallback_gsettings (XAppDarkModeManager *manager) { XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); DEBUG ("Using fallback gsettings"); priv->fallback_settings = g_settings_new (FALLBACK_SETTINGS); priv->color_scheme = g_settings_get_enum (priv->fallback_settings, "color-scheme"); g_signal_connect_swapped (priv->fallback_settings, "changed::color-scheme", G_CALLBACK (fallback_gsettings_changed_cb), manager); DEBUG ("Initial fallback settings read (color-scheme: %s)", color_scheme_name (priv->color_scheme)); update_gtk_settings (manager); } static gboolean read_portal_setting (XAppDarkModeManager *manager, const char *schema, const char *name, const char *type, GVariant **out) { XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); GError *error = NULL; GVariant *ret; GVariant *child, *child2; GVariantType *out_type; gboolean result = FALSE; ret = g_dbus_proxy_call_sync (priv->portal, "Read", g_variant_new ("(ss)", schema, name), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, &error); if (error) { if (error->domain == G_DBUS_ERROR && error->code == G_DBUS_ERROR_SERVICE_UNKNOWN) { DEBUG ("Portal not found: %s", error->message); } else if (error->domain == G_DBUS_ERROR && error->code == G_DBUS_ERROR_UNKNOWN_METHOD) { DEBUG ("Portal doesn't provide settings: %s", error->message); } else if (g_dbus_error_is_remote_error (error)) { char *remote_error = g_dbus_error_get_remote_error (error); if (!g_strcmp0 (remote_error, PORTAL_ERROR_NOT_FOUND)) { DEBUG ("Setting %s.%s of type %s not found", schema, name, type); } g_free (remote_error); } else { g_critical ("Couldn't read the %s setting: %s", name, error->message); } g_clear_error (&error); return FALSE; } g_variant_get (ret, "(v)", &child); g_variant_get (child, "v", &child2); out_type = g_variant_type_new (type); if (g_variant_type_equal (g_variant_get_type (child2), out_type)) { *out = child2; result = TRUE; } else { g_critical ("Invalid type for %s.%s: expected %s, got %s", schema, name, type, g_variant_get_type_string (child2)); g_variant_unref (child2); } g_variant_type_free (out_type); g_variant_unref (child); g_variant_unref (ret); g_clear_error (&error); return result; } static void portal_changed_cb (GDBusProxy *proxy, const char *sender_name, const char *signal_name, GVariant *parameters, gpointer user_data) { XAppDarkModeManager *manager = XAPP_DARK_MODE_MANAGER (user_data); XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); const char *namespace; const char *name; GVariant *value = NULL; if (g_strcmp0 (signal_name, "SettingChanged")) return; g_variant_get (parameters, "(&s&sv)", &namespace, &name, &value); if (!g_strcmp0 (namespace, "org.freedesktop.appearance") && !g_strcmp0 (name, "color-scheme")) { priv->color_scheme = g_variant_get_uint32 (value); g_variant_unref (value); } DEBUG ("Portal setting changed (color-scheme: %s)", color_scheme_name (priv->color_scheme)); update_gtk_settings (manager); } static void init_and_monitor_portal (XAppDarkModeManager *manager) { XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); GVariant *value = NULL; if (read_portal_setting (manager, "org.freedesktop.appearance", "color-scheme", "u", &value)) { priv->color_scheme = g_variant_get_uint32 (value); g_variant_unref (value); DEBUG ("Initial portal setting read (color-scheme: %s)", color_scheme_name (priv->color_scheme)); update_gtk_settings (manager); g_signal_connect (priv->portal, "g-signal", G_CALLBACK (portal_changed_cb), manager); } else { use_fallback_gsettings (manager); } } static void new_portal_callback (GObject *source, GAsyncResult *res, gpointer user_data) { g_return_if_fail (XAPP_IS_DARK_MODE_MANAGER (user_data)); XAppDarkModeManager *manager = XAPP_DARK_MODE_MANAGER (user_data); XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); GError *error = NULL; priv->portal = g_dbus_proxy_new_for_bus_finish (res, &error); if (error != NULL) { g_critical ("XDG desktop portal proxy failed to initialize: %s", error->message); g_free (error); use_fallback_gsettings (manager); return; } init_and_monitor_portal (manager); } static void init_manager (XAppDarkModeManager *manager) { DEBUG ("XAppDarkModeManager: init_manager"); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, NULL, PORTAL_BUS_NAME, PORTAL_OBJECT_PATH, PORTAL_SETTINGS_INTERFACE, NULL, (GAsyncReadyCallback) new_portal_callback, manager); } static void xapp_dark_mode_manager_init (XAppDarkModeManager *manager) { } static void xapp_dark_mode_manager_dispose (GObject *object) { XAppDarkModeManager *manager = XAPP_DARK_MODE_MANAGER (object); XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); DEBUG ("XAppDarkModeManager dispose (%p)", object); g_clear_object (&priv->fallback_settings); g_clear_object (&priv->portal); G_OBJECT_CLASS (xapp_dark_mode_manager_parent_class)->dispose (object); } static void xapp_dark_mode_manager_finalize (GObject *object) { DEBUG ("XAppDarkModeManager finalize (%p)", object); G_OBJECT_CLASS (xapp_dark_mode_manager_parent_class)->finalize (object); } static void xapp_dark_mode_manager_class_init (XAppDarkModeManagerClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xapp_dark_mode_manager_dispose; gobject_class->finalize = xapp_dark_mode_manager_finalize; } /** * xapp_dark_mode_manager_new: * @prefer_dark_mode: The application's preference. * * * Returns: (transfer full): a new XAppDarkModeManager instance. Free with g_object_unref. * * Since: 2.6 */ XAppDarkModeManager * xapp_dark_mode_manager_new (gboolean prefer_dark_mode) { XAppDarkModeManager *manager = g_object_new (XAPP_TYPE_DARK_MODE_MANAGER, NULL); XAppDarkModeManagerPrivate *priv = xapp_dark_mode_manager_get_instance_private (manager); priv->app_prefers_dark = prefer_dark_mode; init_manager (manager); return manager; } xapp-2.8.8/libxapp/xapp-stack-sidebar.c0000664000175000017500000003436414736763051016740 0ustar fabiofabio/* Based on gtkstacksidebar.c */ #include "xapp-stack-sidebar.h" /** * SECTION:xapp-stack-sidebar * @Title: XAppStackSidebar * @Short_description: An automatic sidebar widget * * A XAppStackSidebar allows you to quickly and easily provide a * consistent "sidebar" object for your user interface * * In order to use a XAppStackSidebar, you simply use a GtkStack to * organize your UI flow, and add the sidebar to your sidebar area. You * can use xapp_stack_sidebar_set_stack() to connect the #XAppStackSidebar * to the #GtkStack. The #XAppStackSidebar is an extended version of the * the #GtkStackSidebar that allows showing an icon in addition to the text. * * # CSS nodes * * XAppStackSidebar has a single CSS node with the name stacksidebar and * style class .sidebar * * When circumstances require it, XAppStackSidebar adds the * .needs-attention style class to the widgets representing the stack * pages. */ struct _XAppStackSidebar { GtkBin parent_instance; GtkListBox *list; GtkStack *stack; GHashTable *rows; gboolean in_child_changed; }; enum { PROP_0, PROP_STACK, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; G_DEFINE_TYPE (XAppStackSidebar, xapp_stack_sidebar, GTK_TYPE_BIN) static void xapp_stack_sidebar_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { switch (prop_id) { case PROP_STACK: xapp_stack_sidebar_set_stack (XAPP_STACK_SIDEBAR (object), g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_stack_sidebar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { XAppStackSidebar *sidebar = XAPP_STACK_SIDEBAR (object); switch (prop_id) { case PROP_STACK: g_value_set_object (value, sidebar->stack); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static gint sort_list (GtkListBoxRow *row1, GtkListBoxRow *row2, gpointer userdata) { XAppStackSidebar *sidebar = XAPP_STACK_SIDEBAR (userdata); GtkWidget *item; GtkWidget *widget; gint left = 0; gint right = 0; if (row1) { item = gtk_bin_get_child (GTK_BIN (row1)); widget = g_object_get_data (G_OBJECT (item), "stack-child"); gtk_container_child_get (GTK_CONTAINER (sidebar->stack), widget, "position", &left, NULL); } if (row2) { item = gtk_bin_get_child (GTK_BIN (row2)); widget = g_object_get_data (G_OBJECT (item), "stack-child"); gtk_container_child_get (GTK_CONTAINER (sidebar->stack), widget, "position", &right, NULL); } if (left < right) { return -1; } if (left == right) { return 0; } return 1; } static void xapp_stack_sidebar_row_selected (GtkListBox *box, GtkListBoxRow *row, gpointer user_data) { XAppStackSidebar *sidebar = XAPP_STACK_SIDEBAR (user_data); GtkWidget *item; GtkWidget *widget; if (sidebar->in_child_changed) { return; } if (!row) { return; } item = gtk_bin_get_child (GTK_BIN (row)); widget = g_object_get_data (G_OBJECT (item), "stack-child"); gtk_stack_set_visible_child (sidebar->stack, widget); } static void xapp_stack_sidebar_init (XAppStackSidebar *sidebar) { GtkStyleContext *style; GtkWidget *sw; sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (sidebar), sw); sidebar->list = GTK_LIST_BOX (gtk_list_box_new ()); gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (sidebar->list)); gtk_list_box_set_sort_func (sidebar->list, sort_list, sidebar, NULL); g_signal_connect (sidebar->list, "row-selected", G_CALLBACK (xapp_stack_sidebar_row_selected), sidebar); style = gtk_widget_get_style_context (GTK_WIDGET (sidebar)); gtk_style_context_add_class (style, "sidebar"); gtk_widget_show_all (GTK_WIDGET (sidebar)); sidebar->rows = g_hash_table_new (NULL, NULL); } static void update_row (XAppStackSidebar *sidebar, GtkWidget *widget, GtkWidget *row) { GList *children; GList *list; GtkWidget *item; gchar *title; gchar *icon_name; gboolean needs_attention; GtkStyleContext *context; gtk_container_child_get (GTK_CONTAINER (sidebar->stack), widget, "title", &title, "icon-name", &icon_name, "needs-attention", &needs_attention, NULL); item = gtk_bin_get_child (GTK_BIN (row)); children = gtk_container_get_children (GTK_CONTAINER (item)); for (list = children; list != NULL; list = list->next) { GtkWidget *child = list->data; if (GTK_IS_LABEL (child)) { gtk_label_set_text (GTK_LABEL (child), title); } else if (GTK_IS_IMAGE (child)) { gtk_image_set_from_icon_name (GTK_IMAGE (child), icon_name, GTK_ICON_SIZE_MENU); } } gtk_widget_set_visible (row, gtk_widget_get_visible (widget) && (title != NULL || icon_name != NULL)); context = gtk_widget_get_style_context (row); if (needs_attention) { gtk_style_context_add_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION); } else { gtk_style_context_remove_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION); } g_free (title); g_free (icon_name); g_list_free (children); } static void on_position_updated (GtkWidget *widget, GParamSpec *pspec, XAppStackSidebar *sidebar) { gtk_list_box_invalidate_sort (sidebar->list); } static void on_child_updated (GtkWidget *widget, GParamSpec *pspec, XAppStackSidebar *sidebar) { GtkWidget *row; row = g_hash_table_lookup (sidebar->rows, widget); update_row (sidebar, widget, row); } static void add_child (GtkWidget *widget, XAppStackSidebar *sidebar) { GtkWidget *item; GtkWidget *label; GtkWidget *icon; GtkWidget *row; /* Check we don't actually already know about this widget */ if (g_hash_table_lookup (sidebar->rows, widget)) { return; } /* Make a pretty item when we add children */ item = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_set_margin_start (item, 6); gtk_widget_set_margin_end (item, 6); icon = gtk_image_new (); gtk_box_pack_start (GTK_BOX (item), icon, FALSE, FALSE, 0); label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (item), label, FALSE, FALSE, 0); row = gtk_list_box_row_new (); gtk_container_add (GTK_CONTAINER (row), item); gtk_widget_show_all (item); update_row (sidebar, widget, row); /* Hook up events */ g_signal_connect (widget, "child-notify::title", G_CALLBACK (on_child_updated), sidebar); g_signal_connect (widget, "child-notify::icon-name", G_CALLBACK (on_child_updated), sidebar); g_signal_connect (widget, "child-notify::needs-attention", G_CALLBACK (on_child_updated), sidebar); g_signal_connect (widget, "notify::visible", G_CALLBACK (on_child_updated), sidebar); g_signal_connect (widget, "child-notify::position", G_CALLBACK (on_position_updated), sidebar); g_object_set_data (G_OBJECT (item), "stack-child", widget); g_hash_table_insert (sidebar->rows, widget, row); gtk_container_add (GTK_CONTAINER (sidebar->list), row); } static void remove_child (GtkWidget *widget, XAppStackSidebar *sidebar) { GtkWidget *row; row = g_hash_table_lookup (sidebar->rows, widget); if (!row) { return; } g_signal_handlers_disconnect_by_func (widget, on_child_updated, sidebar); g_signal_handlers_disconnect_by_func (widget, on_position_updated, sidebar); gtk_container_remove (GTK_CONTAINER (sidebar->list), row); g_hash_table_remove (sidebar->rows, widget); } static void populate_sidebar (XAppStackSidebar *sidebar) { GtkWidget *widget; GtkWidget *row; gtk_container_foreach (GTK_CONTAINER (sidebar->stack), (GtkCallback)add_child, sidebar); widget = gtk_stack_get_visible_child (sidebar->stack); if (widget) { row = g_hash_table_lookup (sidebar->rows, widget); gtk_list_box_select_row (sidebar->list, GTK_LIST_BOX_ROW (row)); } } static void clear_sidebar (XAppStackSidebar *sidebar) { gtk_container_foreach (GTK_CONTAINER (sidebar->stack), (GtkCallback)remove_child, sidebar); } static void on_child_changed (GtkWidget *widget, GParamSpec *pspec, XAppStackSidebar *sidebar) { GtkWidget *child; GtkWidget *row; child = gtk_stack_get_visible_child (GTK_STACK (widget)); row = g_hash_table_lookup (sidebar->rows, child); if (row != NULL) { sidebar->in_child_changed = TRUE; gtk_list_box_select_row (sidebar->list, GTK_LIST_BOX_ROW (row)); sidebar->in_child_changed = FALSE; } } static void on_stack_child_added (GtkContainer *container, GtkWidget *widget, XAppStackSidebar *sidebar) { add_child (widget, sidebar); } static void on_stack_child_removed (GtkContainer *container, GtkWidget *widget, XAppStackSidebar *sidebar) { remove_child (widget, sidebar); } static void disconnect_stack_signals (XAppStackSidebar *sidebar) { g_signal_handlers_disconnect_by_func (sidebar->stack, on_stack_child_added, sidebar); g_signal_handlers_disconnect_by_func (sidebar->stack, on_stack_child_removed, sidebar); g_signal_handlers_disconnect_by_func (sidebar->stack, on_child_changed, sidebar); g_signal_handlers_disconnect_by_func (sidebar->stack, disconnect_stack_signals, sidebar); } static void connect_stack_signals (XAppStackSidebar *sidebar) { g_signal_connect_after (sidebar->stack, "add", G_CALLBACK (on_stack_child_added), sidebar); g_signal_connect_after (sidebar->stack, "remove", G_CALLBACK (on_stack_child_removed), sidebar); g_signal_connect (sidebar->stack, "notify::visible-child", G_CALLBACK (on_child_changed), sidebar); g_signal_connect_swapped (sidebar->stack, "destroy", G_CALLBACK (disconnect_stack_signals), sidebar); } static void xapp_stack_sidebar_dispose (GObject *object) { XAppStackSidebar *sidebar = XAPP_STACK_SIDEBAR (object); xapp_stack_sidebar_set_stack (sidebar, NULL); G_OBJECT_CLASS (xapp_stack_sidebar_parent_class)->dispose (object); } static void xapp_stack_sidebar_finalize (GObject *object) { XAppStackSidebar *sidebar = XAPP_STACK_SIDEBAR (object); g_hash_table_destroy (sidebar->rows); G_OBJECT_CLASS (xapp_stack_sidebar_parent_class)->finalize (object); } static void xapp_stack_sidebar_class_init (XAppStackSidebarClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->dispose = xapp_stack_sidebar_dispose; object_class->finalize = xapp_stack_sidebar_finalize; object_class->set_property = xapp_stack_sidebar_set_property; object_class->get_property = xapp_stack_sidebar_get_property; obj_properties[PROP_STACK] = g_param_spec_object ("stack", "Stack", "Associated stack for this XAppStackSidebar", GTK_TYPE_STACK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, N_PROPERTIES, obj_properties); gtk_widget_class_set_css_name (widget_class, "stacksidebar"); } /** * xapp_stack_sidebar_new: * * Creates a new sidebar. * * Returns: the new #XAppStackSidebar */ XAppStackSidebar * xapp_stack_sidebar_new (void) { return g_object_new (XAPP_TYPE_STACK_SIDEBAR, NULL); } /** * xapp_stack_sidebar_set_stack: * @sidebar: a #XAppStackSidebar * @stack: a #GtkStack * * Set the #GtkStack associated with this #XAppStackSidebar. * * The sidebar widget will automatically update according to the order * (packing) and items within the given #GtkStack. */ void xapp_stack_sidebar_set_stack (XAppStackSidebar *sidebar, GtkStack *stack) { g_return_if_fail (XAPP_IS_STACK_SIDEBAR (sidebar)); g_return_if_fail (GTK_IS_STACK (stack) || stack == NULL); if (sidebar->stack == stack) { return; } if (sidebar->stack) { disconnect_stack_signals (sidebar); clear_sidebar (sidebar); g_clear_object (&sidebar->stack); } if (stack) { sidebar->stack = g_object_ref (stack); populate_sidebar (sidebar); connect_stack_signals (sidebar); } gtk_widget_queue_resize (GTK_WIDGET (sidebar)); g_object_notify (G_OBJECT (sidebar), "stack"); } /** * xapp_stack_sidebar_get_stack: * @sidebar: a #XAppStackSidebar * * Retrieves the stack. * See xapp_stack_sidebar_set_stack(). * * Returns: (nullable) (transfer none): the associated #GtkStack or * %NULL if none has been set explicitly */ GtkStack * xapp_stack_sidebar_get_stack (XAppStackSidebar *sidebar) { g_return_val_if_fail (XAPP_IS_STACK_SIDEBAR (sidebar), NULL); return GTK_STACK (sidebar->stack); } xapp-2.8.8/libxapp/xapp-icon-chooser-dialog.c0000664000175000017500000020312214736763051020037 0ustar fabiofabio#include #include #include #include #include "xapp-enums.h" #include "xapp-icon-chooser-dialog.h" #include "xapp-stack-sidebar.h" #include #include #define DEBUG_REFS 0 #define DEBUG_ICON_THEME 0 /** * SECTION:xapp-icon-chooser-dialog * @Short_description: A dialog for selecting an icon * @Title: XAppIconChooserDialog * * The XAppIconChooserDialog creates a dialog so that * the user can select an icon. It provides the ability * to browse by category, search by icon name, or select * from a specific file. */ typedef struct { const gchar *name; /* This is a translation which doesn't get freed */ GList *icons; GList *iter; GtkListStore *model; } IconCategoryInfo; typedef struct { GtkResponseType response; XAppIconSize icon_size; GtkListStore *search_icon_store; GFileEnumerator *search_file_enumerator; GCancellable *cancellable; GList *full_icon_list; GList *search_iter; GHashTable *categories; GHashTable *surfaces_by_name; GtkWidget *search_bar; GtkWidget *icon_view; GtkWidget *list_box; GtkWidget *default_button; GtkWidget *select_button; GtkWidget *browse_button; GtkWidget *action_area; GtkWidget *loading_bar; GtkCellArea *ca_box; gchar *icon_string; gchar *current_text; gulong search_changed_id; gboolean allow_paths; gchar *default_icon; IconCategoryInfo *current_category; } XAppIconChooserDialogPrivate; struct _XAppIconChooserDialog { XAppGtkWindow parent_instance; }; typedef struct { XAppIconChooserDialog *dialog; GtkListStore *model; IconCategoryInfo *category_info; GCancellable *cancellable; cairo_surface_t *surface; const gchar *name; gboolean chunk_end; } NamedIconInfoLoadCallbackInfo; typedef struct { XAppIconChooserDialog *dialog; GtkListStore *model; GCancellable *cancellable; GFileEnumerator *enumerator; gchar *short_name; gchar *long_name; gboolean chunk_end; } FileIconInfoLoadCallbackInfo; typedef struct { const gchar *name; const gchar *contexts[5]; } IconCategoryDefinition; static IconCategoryDefinition categories[] = { // Category name context names { N_("Actions"), { "Actions", NULL } }, { N_("Applications"), { "Applications", "Apps", NULL } }, { N_("Categories"), { "Categories", NULL } }, { N_("Devices"), { "Devices", NULL } }, { N_("Emblems"), { "Emblems", NULL } }, { N_("Emoji"), { "Emotes", NULL } }, { N_("Mime types"), { "MimeTypes", "Mimetypes", NULL } }, { N_("Places"), { "Places", NULL } }, { N_("Status"), { "Status", "Notifications", NULL } }, { N_("Other"), { "Panel", NULL } } }; enum { CLOSE, SELECT, LAST_SIGNAL }; enum { PROP_0, PROP_ICON_SIZE, PROP_ALLOW_PATHS, PROP_DEFAULT_ICON, N_PROPERTIES }; enum { COLUMN_DISPLAY_NAME, COLUMN_FULL_NAME, COLUMN_SURFACE, }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; static guint signals[LAST_SIGNAL] = {0, }; G_DEFINE_TYPE_WITH_PRIVATE (XAppIconChooserDialog, xapp_icon_chooser_dialog, XAPP_TYPE_GTK_WINDOW) static void on_category_selected (GtkListBox *list_box, XAppIconChooserDialog *dialog); static void on_search_text_changed (GtkSearchEntry *entry, XAppIconChooserDialog *dialog); static void on_icon_view_selection_changed (GtkIconView *icon_view, gpointer user_data); static void on_icon_store_icons_added (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data); static void on_browse_button_clicked (GtkButton *button, gpointer user_data); static void on_select_button_clicked (GtkButton *button, gpointer user_data); static void on_cancel_button_clicked (GtkButton *button, gpointer user_data); static void on_default_button_clicked (GtkButton *button, gpointer user_data); static gboolean on_search_bar_key_pressed (GtkWidget *widget, GdkEvent *event, gpointer user_data); static gboolean on_delete_event (GtkWidget *widget, GdkEventAny *event); static void on_icon_view_item_activated (GtkIconView *iconview, GtkTreePath *path, gpointer user_data); static void load_categories (XAppIconChooserDialog *dialog); static void load_icons_for_category (XAppIconChooserDialog *dialog, IconCategoryInfo *category_info, guint icon_size); static void search_path (XAppIconChooserDialog *dialog, const gchar *path_string, GtkListStore *icon_store); static void search_icon_name (XAppIconChooserDialog *dialog, const gchar *name_string, GtkListStore *icon_store); static gint list_box_sort (GtkListBoxRow *row1, GtkListBoxRow *row2, gpointer user_data); static gint search_model_sort (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data); static void free_category_info (IconCategoryInfo *category_info) { g_list_free_full (category_info->icons, g_free); g_clear_object (&category_info->model); g_free (category_info); } static void free_file_info (FileIconInfoLoadCallbackInfo *file_info) { g_object_unref (file_info->cancellable); g_object_unref (file_info->enumerator); g_free (file_info->short_name); g_free (file_info->long_name); g_free (file_info); } static void free_named_info (NamedIconInfoLoadCallbackInfo *named_info) { g_object_unref (named_info->cancellable); g_clear_pointer (&named_info->surface, cairo_surface_destroy); g_free (named_info); } #if DEBUG_REFS static void on_cancellable_finalize (gpointer data, GObject *object) { g_printerr ("Cancellable Finalize: %p\n", object); } static void on_enumerator_finalize (gpointer data, GObject *object) { g_printerr ("Enumerator Finalize: %p\n", object); } #endif static void on_enumerator_toggle_ref_called (gpointer data, GObject *object, gboolean is_last_ref) { XAppIconChooserDialog *dialog; XAppIconChooserDialogPrivate *priv; dialog = XAPP_ICON_CHOOSER_DIALOG (data); priv = xapp_icon_chooser_dialog_get_instance_private (dialog); if (is_last_ref) { g_object_remove_toggle_ref (object, (GToggleNotify) on_enumerator_toggle_ref_called, dialog); priv->search_file_enumerator = NULL; } } static void clear_search_state (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); g_cancellable_cancel (priv->cancellable); g_clear_object (&priv->cancellable); g_clear_object (&priv->search_file_enumerator); gtk_widget_hide (priv->loading_bar); priv->search_iter = NULL; } void xapp_icon_chooser_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { XAppIconChooserDialog *dialog; XAppIconChooserDialogPrivate *priv; dialog = XAPP_ICON_CHOOSER_DIALOG (object); priv = xapp_icon_chooser_dialog_get_instance_private (dialog); switch (prop_id) { case PROP_ICON_SIZE: g_value_set_enum (value, priv->icon_size); break; case PROP_ALLOW_PATHS: g_value_set_boolean (value, priv->allow_paths); break; case PROP_DEFAULT_ICON: g_value_set_string (value, xapp_icon_chooser_dialog_get_default_icon(dialog)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } void xapp_icon_chooser_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { XAppIconChooserDialog *dialog; XAppIconChooserDialogPrivate *priv; dialog = XAPP_ICON_CHOOSER_DIALOG (object); priv = xapp_icon_chooser_dialog_get_instance_private (dialog); switch (prop_id) { case PROP_ICON_SIZE: priv->icon_size = g_value_get_enum (value); break; case PROP_ALLOW_PATHS: priv->allow_paths = g_value_get_boolean (value); if (priv->allow_paths) { gtk_widget_show (priv->browse_button); gtk_widget_set_no_show_all (priv->browse_button, FALSE); } else { gtk_widget_hide (priv->browse_button); gtk_widget_set_no_show_all (priv->browse_button, TRUE); } break; case PROP_DEFAULT_ICON: xapp_icon_chooser_dialog_set_default_icon (dialog, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_icon_chooser_dialog_dispose (GObject *object) { XAppIconChooserDialog *dialog; XAppIconChooserDialogPrivate *priv; dialog = XAPP_ICON_CHOOSER_DIALOG (object); priv = xapp_icon_chooser_dialog_get_instance_private (dialog); if (priv->categories != NULL) { g_hash_table_destroy (priv->categories); priv->categories = NULL; } if (priv->surfaces_by_name != NULL) { g_hash_table_destroy (priv->surfaces_by_name); priv->surfaces_by_name = NULL; } g_clear_pointer (&priv->icon_string, g_free); g_clear_pointer (&priv->default_icon, g_free); g_clear_pointer (&priv->current_text, g_free); g_clear_object (&priv->cancellable); G_OBJECT_CLASS (xapp_icon_chooser_dialog_parent_class)->dispose (object); } static void xapp_icon_chooser_dialog_init (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; GtkWidget *main_box; GtkWidget *secondary_box; GtkWidget *toolbar; GtkWidget *overlay; GtkWidget *spinner; GtkWidget *spinner_label; GtkWidget *loading_bar_box; GtkToolItem *tool_item; GtkWidget *toolbar_box; GtkWidget *right_box; GtkStyleContext *style; GtkSizeGroup *button_size_group; GtkWidget *cancel_button; GtkWidget *button_area; GtkWidget *scrolled_window; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); priv->icon_size = XAPP_ICON_SIZE_32; priv->categories = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) free_category_info); /* surfaces_by_name will save surfaces generated by icon name, so they can avoid creating * them again when they're reloaded (like re-selecting a previously selected category) */ priv->surfaces_by_name = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) cairo_surface_destroy); priv->response = GTK_RESPONSE_NONE; priv->icon_string = NULL; priv->current_text = NULL; priv->cancellable = NULL; priv->allow_paths = TRUE; priv->full_icon_list = NULL; priv->search_icon_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, CAIRO_GOBJECT_TYPE_SURFACE); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->search_icon_store), COLUMN_DISPLAY_NAME, search_model_sort, priv, NULL); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->search_icon_store), COLUMN_DISPLAY_NAME, GTK_SORT_ASCENDING); g_signal_connect (priv->search_icon_store, "row-inserted", G_CALLBACK (on_icon_store_icons_added), dialog); gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 450); gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), TRUE); gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_title (GTK_WINDOW (dialog), _("Choose an icon")); main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (dialog), main_box); // toolbar toolbar = gtk_toolbar_new (); gtk_box_pack_start (GTK_BOX (main_box), toolbar, FALSE, FALSE, 0); style = gtk_widget_get_style_context (toolbar); gtk_style_context_add_class (style, "primary-toolbar"); tool_item = gtk_tool_item_new (); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), tool_item, 0); gtk_tool_item_set_expand (tool_item, TRUE); toolbar_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add (GTK_CONTAINER (tool_item), toolbar_box); style = gtk_widget_get_style_context (GTK_WIDGET (toolbar_box)); gtk_style_context_add_class (style, "linked"); priv->search_bar = gtk_search_entry_new (); gtk_box_pack_start (GTK_BOX (toolbar_box), priv->search_bar, TRUE, TRUE, 0); gtk_entry_set_placeholder_text (GTK_ENTRY (priv->search_bar), _("Search")); priv->search_changed_id = g_signal_connect (priv->search_bar, "search-changed", G_CALLBACK (on_search_text_changed), dialog); g_signal_connect (priv->search_bar, "key-press-event", G_CALLBACK (on_search_bar_key_pressed), dialog); priv->browse_button = gtk_button_new_with_label (_("Browse")); gtk_box_pack_start (GTK_BOX (toolbar_box), priv->browse_button, FALSE, FALSE, 0); g_signal_connect (priv->browse_button, "clicked", G_CALLBACK (on_browse_button_clicked), dialog); secondary_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (main_box), secondary_box, TRUE, TRUE, 0); // context list scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (secondary_box), scrolled_window, FALSE, FALSE, 0); priv->list_box = gtk_list_box_new (); gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (priv->list_box)); gtk_list_box_set_sort_func (GTK_LIST_BOX (priv->list_box), list_box_sort, NULL, NULL); g_signal_connect (priv->list_box, "selected-rows-changed", G_CALLBACK (on_category_selected), dialog); style = gtk_widget_get_style_context (GTK_WIDGET (scrolled_window)); gtk_style_context_add_class (style, "sidebar"); right_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (secondary_box), right_box, TRUE, TRUE, 0); overlay = gtk_overlay_new (); gtk_box_pack_start (GTK_BOX (right_box), overlay, TRUE, TRUE, 0); // icon view scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_overlay_add_overlay (GTK_OVERLAY (overlay), scrolled_window); gtk_widget_set_halign (scrolled_window, GTK_ALIGN_FILL); gtk_widget_set_valign (scrolled_window, GTK_ALIGN_FILL); priv->loading_bar = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (priv->loading_bar), GTK_SHADOW_NONE); gtk_style_context_add_class (gtk_widget_get_style_context (priv->loading_bar), "background"); gtk_overlay_add_overlay (GTK_OVERLAY (overlay), priv->loading_bar); gtk_widget_set_halign (priv->loading_bar, GTK_ALIGN_START); gtk_widget_set_valign (priv->loading_bar, GTK_ALIGN_END); gtk_widget_set_no_show_all (priv->loading_bar, TRUE); loading_bar_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add (GTK_CONTAINER (priv->loading_bar), loading_bar_box); g_object_set (loading_bar_box, "margin", 4, NULL); spinner = gtk_spinner_new (); gtk_spinner_start (GTK_SPINNER (spinner)); gtk_box_pack_start (GTK_BOX (loading_bar_box), spinner, FALSE, FALSE, 4); spinner_label = gtk_label_new (_("Loading...")); gtk_box_pack_start (GTK_BOX (loading_bar_box), spinner_label, FALSE, FALSE, 4); gtk_widget_show_all (loading_bar_box); GtkCellArea *ca_box = gtk_cell_area_box_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (ca_box), GTK_ORIENTATION_VERTICAL); GtkCellRenderer *r; r = gtk_cell_renderer_pixbuf_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (ca_box), r, FALSE); gtk_cell_area_attribute_connect (GTK_CELL_AREA (ca_box), r, "surface", COLUMN_SURFACE); r = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (ca_box), r, FALSE); gtk_cell_area_attribute_connect (GTK_CELL_AREA (ca_box), r, "text", COLUMN_DISPLAY_NAME); g_object_set (G_OBJECT (r), "alignment", PANGO_ALIGN_CENTER, "xalign", 0.5, "width-chars", 20, "wrap-mode", PANGO_WRAP_WORD_CHAR, "wrap-width", 0, NULL); priv->ca_box = ca_box; priv->icon_view = gtk_icon_view_new_with_area (GTK_CELL_AREA (ca_box)); gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (priv->icon_view)); gtk_icon_view_set_tooltip_column (GTK_ICON_VIEW (priv->icon_view), COLUMN_FULL_NAME); g_signal_connect (priv->icon_view, "selection-changed", G_CALLBACK (on_icon_view_selection_changed), dialog); g_signal_connect (priv->icon_view, "item-activated", G_CALLBACK (on_icon_view_item_activated), dialog); // buttons button_area = gtk_action_bar_new (); priv->action_area = button_area; gtk_box_pack_start (GTK_BOX (main_box), button_area, FALSE, FALSE, 0); button_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); priv->default_button = gtk_button_new_with_label (_("Default")); gtk_widget_set_no_show_all (priv->default_button, TRUE); style = gtk_widget_get_style_context (GTK_WIDGET (priv->default_button)); gtk_style_context_add_class (style, "text-button"); gtk_size_group_add_widget (button_size_group, priv->default_button); gtk_action_bar_pack_start (GTK_ACTION_BAR (button_area), priv->default_button); g_signal_connect (priv->default_button, "clicked", G_CALLBACK (on_default_button_clicked), dialog); priv->select_button = gtk_button_new_with_label (_("Select")); style = gtk_widget_get_style_context (GTK_WIDGET (priv->select_button)); gtk_style_context_add_class (style, "text-button"); gtk_size_group_add_widget (button_size_group, priv->select_button); gtk_action_bar_pack_end (GTK_ACTION_BAR (button_area), priv->select_button); g_signal_connect (priv->select_button, "clicked", G_CALLBACK (on_select_button_clicked), dialog); cancel_button = gtk_button_new_with_label (_("Cancel")); style = gtk_widget_get_style_context (GTK_WIDGET (cancel_button)); gtk_style_context_add_class (style, "text-button"); gtk_size_group_add_widget (button_size_group, cancel_button); gtk_action_bar_pack_end (GTK_ACTION_BAR (button_area), cancel_button); g_signal_connect (cancel_button, "clicked", G_CALLBACK (on_cancel_button_clicked), dialog); load_categories (dialog); } static void xapp_icon_chooser_dialog_class_init (XAppIconChooserDialogClass *klass) { GtkBindingSet *binding_set; GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->get_property = xapp_icon_chooser_dialog_get_property; object_class->set_property = xapp_icon_chooser_dialog_set_property; object_class->dispose = xapp_icon_chooser_dialog_dispose; widget_class->delete_event = on_delete_event; /** * XAppIconChooserDialog:icon-size: * * The preferred size to use when looking up icons. This only works with icon names. * Additionally, there is no guarantee that a selected icon name will exist in a * particular size. */ obj_properties[PROP_ICON_SIZE] = g_param_spec_enum ("icon-size", _("Icon size"), _("The preferred icon size."), XAPP_TYPE_ICON_SIZE, XAPP_ICON_SIZE_32, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** * XAppIconChooserDialog:allow-paths: * * Whether to allow paths to be searched and selected or only icon names. */ obj_properties[PROP_ALLOW_PATHS] = g_param_spec_boolean ("allow-paths", _("Allow Paths"), _("Whether to allow paths."), TRUE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** * XAppIconChooserDialog:default-icon: * * The icon to use by default. */ obj_properties[PROP_DEFAULT_ICON] = g_param_spec_string ("default-icon", _("Default Icon"), _("The icon to use by default"), NULL, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, N_PROPERTIES, obj_properties); // keybinding signals signals[CLOSE] = g_signal_new ("close", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GtkWidgetClass, delete_event), NULL, NULL, NULL, G_TYPE_NONE, 0); signals[SELECT] = g_signal_new ("select", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "close", 0); gtk_binding_entry_add_signal (binding_set, GDK_KEY_Return, 0, "select", 0); gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Enter, 0, "select", 0); gtk_widget_class_set_css_name (widget_class, "stacksidebar"); } /** * xapp_icon_chooser_dialog_new: * * Creates a new #XAppIconChooserDialog. * * Returns: a newly created #XAppIconChooserDialog */ XAppIconChooserDialog * xapp_icon_chooser_dialog_new (void) { return g_object_new (XAPP_TYPE_ICON_CHOOSER_DIALOG, NULL); } /** * xapp_icon_chooser_dialog_run: * @dialog: a #XAppIconChooserDialog * * Shows the dialog and enters a separate main loop until an icon is chosen or the action is canceled. * * xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and * xapp_icon_chooser_dialog_run_with_category () may all be called multiple times. This is useful for * applications which use this dialog multiple times, as it may improve performance for subsequent * calls. * * Returns: GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise */ gint xapp_icon_chooser_dialog_run (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); gtk_widget_show_all (GTK_WIDGET (dialog)); gtk_widget_grab_focus (priv->search_bar); gtk_main (); return priv->response; } /** * xapp_icon_chooser_dialog_run_with_icon: * @dialog: a #XAppIconChooserDialog * @icon: a string representing the icon that should be selected * * Like xapp_icon_chooser_dialog_run but selects the icon specified by @icon. This can be either an * icon name or a path. Passing an icon string or path that doesn't exist is accepted, but it may show * multiple results, or none at all. This behavior is useful if, for example, you wish to have the * user select an image file from a particular directory. * * If the property allow_paths is FALSE, setting a path will yield no results when the dialog is opened. * * xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and * xapp_icon_chooser_dialog_run_with_category () may all be called multiple times. This is useful for * applications which use this dialog multiple times, as it may improve performance for subsequent * calls. * * Returns: GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise */ gint xapp_icon_chooser_dialog_run_with_icon (XAppIconChooserDialog *dialog, gchar *icon) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); gtk_widget_show_all (GTK_WIDGET (dialog)); gtk_entry_set_text (GTK_ENTRY (priv->search_bar), icon); gtk_widget_grab_focus (priv->search_bar); gtk_main (); return priv->response; } /** * xapp_icon_chooser_dialog_run_with_category: * @dialog: a #XAppIconChooserDialog * * Like xapp_icon_chooser_dialog_run but selects a particular category specified by @category. * This is used when there is a particular category of icon that is more appropriate than the * others. If the category does not exist, the first category in the list will be selected. To * get a list of possible categories, use gtk_icon_theme_list_contexts (). * * xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and * xapp_icon_chooser_dialog_run_with_category () may all be called multiple times. This is useful for * applications which use this dialog multiple times, as it may improve performance for subsequent * calls. * * Returns: GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise */ gint xapp_icon_chooser_dialog_run_with_category (XAppIconChooserDialog *dialog, gchar *category) { XAppIconChooserDialogPrivate *priv; GList *children; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); gtk_widget_show_all (GTK_WIDGET (dialog)); gtk_widget_grab_focus (priv->search_bar); children = gtk_container_get_children (GTK_CONTAINER (priv->list_box)); for ( ; children; children = children->next) { GtkWidget *row; GtkWidget *child; const gchar *context; row = children->data; child = gtk_bin_get_child (GTK_BIN (row)); context = gtk_label_get_text (GTK_LABEL (child)); if (g_strcmp0 (context, category) == 0) { gtk_list_box_select_row (GTK_LIST_BOX (priv->list_box), GTK_LIST_BOX_ROW (row)); break; } } gtk_main (); return priv->response; } /** * xapp_icon_chooser_dialog_get_default_icon: * * Returns the default icon (if set). * * Returns: (transfer full): the default icon, or NULL if none is set */ gchar * xapp_icon_chooser_dialog_get_default_icon (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); return g_strdup(priv->default_icon); } /** * xapp_icon_chooser_dialog_set_default_icon: * @icon: the default icon, or NULL to unset * * Sets the default icon. If @icon is not NULL, a button will be shown that * will reset the dialog to it's default value. */ void xapp_icon_chooser_dialog_set_default_icon (XAppIconChooserDialog *dialog, const gchar *icon) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); priv->default_icon = g_strdup (icon); if (icon == NULL) { gtk_widget_hide (priv->default_button); } else { gtk_widget_show (priv->default_button); } } /** * xapp_icon_chooser_dialog_add_custom_category: * @dialog: a #XAppIconChooserDialog * @name: the name of the category as it will be displayed in the category list * @icons: (transfer full) (element-type utf8): a list of icon names to add to the new category * * Adds a custom category to the dialog. */ void xapp_icon_chooser_dialog_add_custom_category (XAppIconChooserDialog *dialog, const gchar *name, GList *icons) { XAppIconChooserDialogPrivate *priv; IconCategoryInfo *category_info; GtkWidget *row; GtkWidget *label; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); category_info = g_new0 (IconCategoryInfo, 1); category_info->name = name; category_info->icons = icons; category_info->model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, CAIRO_GOBJECT_TYPE_SURFACE); g_signal_connect (category_info->model, "row-inserted", G_CALLBACK (on_icon_store_icons_added), dialog); category_info->icons = g_list_sort (category_info->icons, (GCompareFunc) g_utf8_collate); row = gtk_list_box_row_new (); label = gtk_label_new (category_info->name); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_widget_set_margin_start (GTK_WIDGET (label), 6); gtk_widget_set_margin_end (GTK_WIDGET (label), 6); gtk_container_add (GTK_CONTAINER (row), label); gtk_container_add (GTK_CONTAINER (priv->list_box), row); g_hash_table_insert (priv->categories, row, category_info); } /** * xapp_icon_chooser_dialog_get_icon_string: * @dialog: a #XAppIconChooserDialog * * Gets the currently selected icon from the dialog. If allow-paths is TRUE, this function may return * either an icon name or a path depending on what the user selects. Otherwise it will only return an * icon name. * * Returns: (transfer full): the string representation of the currently selected icon or NULL * if no icon is selected. */ gchar * xapp_icon_chooser_dialog_get_icon_string (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); return g_strdup (priv->icon_string); } static void xapp_icon_chooser_dialog_close (XAppIconChooserDialog *dialog, GtkResponseType response) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); priv->response = response; gtk_widget_hide (GTK_WIDGET (dialog)); gtk_main_quit (); } static void on_custom_button_clicked (GtkButton *button, gpointer user_data) { GtkResponseType response_id; response_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "response-id")); xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), response_id); } /** * xapp_icon_chooser_dialog_add_button: * @dialog: an #XAppIconChooserDialog * @button: a #GtkButton to add * @packing: the #GtkPackType to specify start or end packing to the action bar * @response_id: the dialog response id to return when this button is clicked. * * Allows a button to be added to the #GtkActionBar of the dialog with a custom * response id. */ void xapp_icon_chooser_dialog_add_button (XAppIconChooserDialog *dialog, GtkWidget *button, GtkPackType packing, GtkResponseType response_id) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); g_signal_connect (button, "clicked", G_CALLBACK (on_custom_button_clicked), dialog); /* This saves having to use a custom container for callback data. */ g_object_set_data (G_OBJECT (button), "response-id", GINT_TO_POINTER (response_id)); if (packing == GTK_PACK_START) { gtk_action_bar_pack_start (GTK_ACTION_BAR (priv->action_area), button); } else { gtk_action_bar_pack_end (GTK_ACTION_BAR (priv->action_area), button); } } static gint list_box_sort (GtkListBoxRow *row1, GtkListBoxRow *row2, gpointer user_data) { GtkWidget *item; const gchar *label1; const gchar *label2; item = gtk_bin_get_child (GTK_BIN (row1)); label1 = gtk_label_get_text (GTK_LABEL (item)); item = gtk_bin_get_child (GTK_BIN (row2)); label2 = gtk_label_get_text (GTK_LABEL (item)); return g_strcmp0 (label1, label2); } static gint search_model_sort (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { gchar *a_value; gchar *b_value; gchar *search_str; gboolean a_starts_with; gboolean b_starts_with; gint ret; XAppIconChooserDialogPrivate *priv = (XAppIconChooserDialogPrivate *) user_data; search_str = priv->current_text; gtk_tree_model_get (model, a, COLUMN_DISPLAY_NAME, &a_value, -1); gtk_tree_model_get (model, b, COLUMN_DISPLAY_NAME, &b_value, -1); ret = g_strcmp0 (a_value, b_value); if (search_str == NULL) { } else if (g_strcmp0 (a_value, search_str) == 0) { ret = -1; } else if (g_strcmp0 (b_value, search_str) == 0) { ret = 1; } else { a_starts_with = g_str_has_prefix (a_value, search_str); b_starts_with = g_str_has_prefix (b_value, search_str); if (a_starts_with && !b_starts_with) { ret = -1; } if (!a_starts_with && b_starts_with) { ret = 1; } } g_free (a_value); g_free (b_value); return ret; } static void load_categories (XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; GtkListBoxRow *row; GtkIconTheme *theme; GList *contexts, *l; gint i; gint j; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); theme = gtk_icon_theme_get_default (); contexts = gtk_icon_theme_list_contexts (theme); for (i = 0; i < G_N_ELEMENTS (categories); i++) { IconCategoryDefinition *category; IconCategoryInfo *category_info; GtkWidget *row; GtkWidget *label; GList *context_icons; category = &categories[i]; category_info = g_new0 (IconCategoryInfo, 1); category_info->name = _(category->name); for (j = 0; category->contexts[j] != NULL; j++) { GList *match; context_icons = gtk_icon_theme_list_icons (theme, category->contexts[j]); category_info->icons = g_list_concat (category_info->icons, context_icons); match = g_list_find_custom (contexts, category->contexts[j], (GCompareFunc) g_strcmp0); if (match) { contexts = g_list_remove_link (contexts, match); g_free (match->data); g_list_free (match); } } /* Any contexts not consumed by categories should be added to the 'other' category */ if (i == (G_N_ELEMENTS (categories) - 1) && g_list_length (contexts) > 0) { for (l = contexts; l != NULL; l = l->next) { #if DEBUG_ICON_THEME g_message ("Adding unused category to Other category: '%s'", (gchar *) l->data); #endif context_icons = gtk_icon_theme_list_icons (theme, (gchar *) l->data); category_info->icons = g_list_concat (category_info->icons, context_icons); } } if (g_list_length (category_info->icons) == 0) { free_category_info (category_info); continue; } /* Add the list of icons for this category into our master search list */ priv->full_icon_list = g_list_concat (priv->full_icon_list, g_list_copy (category_info->icons)); category_info->model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, CAIRO_GOBJECT_TYPE_SURFACE); g_signal_connect (category_info->model, "row-inserted", G_CALLBACK (on_icon_store_icons_added), dialog); category_info->icons = g_list_sort (category_info->icons, (GCompareFunc) g_utf8_collate); row = gtk_list_box_row_new (); label = gtk_label_new (category_info->name); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_widget_set_margin_start (GTK_WIDGET (label), 6); gtk_widget_set_margin_end (GTK_WIDGET (label), 6); gtk_container_add (GTK_CONTAINER (row), label); gtk_container_add (GTK_CONTAINER (priv->list_box), row); g_hash_table_insert (priv->categories, row, category_info); } g_list_free_full (contexts, g_free); priv->full_icon_list = g_list_sort (priv->full_icon_list, (GCompareFunc) g_utf8_collate); row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (priv->list_box), 0); gtk_list_box_select_row (GTK_LIST_BOX (priv->list_box), row); } static gboolean load_next_file_search_chunk (gpointer user_data) { XAppIconChooserDialogPrivate *priv; FileIconInfoLoadCallbackInfo *callback_info; callback_info = (FileIconInfoLoadCallbackInfo*) user_data; priv = xapp_icon_chooser_dialog_get_instance_private (callback_info->dialog); if (g_cancellable_is_cancelled (callback_info->cancellable)) { free_file_info (callback_info); return G_SOURCE_REMOVE; } search_path (callback_info->dialog, priv->current_text, priv->search_icon_store); free_file_info (callback_info); return G_SOURCE_REMOVE; } static gboolean load_next_category_chunk (gpointer user_data) { XAppIconChooserDialogPrivate *priv; NamedIconInfoLoadCallbackInfo *callback_info; callback_info = (NamedIconInfoLoadCallbackInfo*) user_data; priv = xapp_icon_chooser_dialog_get_instance_private (callback_info->dialog); if (g_cancellable_is_cancelled (callback_info->cancellable)) { free_named_info (callback_info); return G_SOURCE_REMOVE; } load_icons_for_category (callback_info->dialog, callback_info->category_info, priv->icon_size); free_named_info (callback_info); return G_SOURCE_REMOVE; } static gboolean load_next_name_search_chunk (gpointer user_data) { XAppIconChooserDialogPrivate *priv; NamedIconInfoLoadCallbackInfo *callback_info; callback_info = (NamedIconInfoLoadCallbackInfo*) user_data; priv = xapp_icon_chooser_dialog_get_instance_private (callback_info->dialog); if (g_cancellable_is_cancelled (callback_info->cancellable)) { free_named_info (callback_info); return G_SOURCE_REMOVE; } search_icon_name (callback_info->dialog, priv->current_text, priv->search_icon_store); free_named_info (callback_info); return G_SOURCE_REMOVE; } static void finish_pixbuf_load_from_file (GObject *stream, GAsyncResult *res, gpointer *user_data) { FileIconInfoLoadCallbackInfo *callback_info; GdkPixbuf *pixbuf; GError *error = NULL; callback_info = (FileIconInfoLoadCallbackInfo *) user_data; pixbuf = gdk_pixbuf_new_from_stream_finish (res, &error); g_input_stream_close (G_INPUT_STREAM (stream), NULL, NULL); g_object_unref (stream); if (g_cancellable_is_cancelled (callback_info->cancellable)) { g_clear_object (&pixbuf); free_file_info (callback_info); return; } if (pixbuf == NULL) { if (error && (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED)) { g_message ("%s\n", error->message); } g_clear_error (&error); } if (pixbuf) { GtkTreeIter iter; cairo_surface_t *surface; surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, 0, gtk_widget_get_window (GTK_WIDGET (callback_info->dialog))); gtk_list_store_append (callback_info->model, &iter); gtk_list_store_set (callback_info->model, &iter, COLUMN_DISPLAY_NAME, callback_info->short_name, COLUMN_FULL_NAME, callback_info->long_name, COLUMN_SURFACE, surface, -1); cairo_surface_destroy (surface); g_object_unref (pixbuf); } if (callback_info->chunk_end) { g_idle_add ((GSourceFunc) load_next_file_search_chunk, callback_info); } else { free_file_info (callback_info); } } static void add_named_entry (NamedIconInfoLoadCallbackInfo *callback_info, cairo_surface_t *surface) { GtkTreeIter iter; gtk_list_store_append (callback_info->model, &iter); gtk_list_store_set (callback_info->model, &iter, COLUMN_DISPLAY_NAME, callback_info->name, COLUMN_FULL_NAME, callback_info->name, COLUMN_SURFACE, surface, -1); } static gboolean add_named_entry_with_existing_surface (gpointer user_data) { NamedIconInfoLoadCallbackInfo *callback_info; callback_info = (NamedIconInfoLoadCallbackInfo*) user_data; if (g_cancellable_is_cancelled (callback_info->cancellable)) { free_named_info (callback_info); return G_SOURCE_REMOVE; } /* Category results have a category_info attached. */ if (callback_info->category_info) { add_named_entry (callback_info, callback_info->surface); if (callback_info->chunk_end) { g_idle_add ((GSourceFunc) load_next_category_chunk, callback_info); return G_SOURCE_REMOVE; } } /* Otherwise, it's a search result set */ else { add_named_entry (callback_info, callback_info->surface); if (callback_info->chunk_end) { g_idle_add ((GSourceFunc) load_next_name_search_chunk, callback_info); return G_SOURCE_REMOVE; } } free_named_info (callback_info); return G_SOURCE_REMOVE; } static void finish_pixbuf_load_from_name (GObject *info, GAsyncResult *res, gpointer *user_data) { XAppIconChooserDialogPrivate *priv; NamedIconInfoLoadCallbackInfo *callback_info; GdkPixbuf *pixbuf; cairo_surface_t *surface; GError *error = NULL; callback_info = (NamedIconInfoLoadCallbackInfo*) user_data; priv = xapp_icon_chooser_dialog_get_instance_private (callback_info->dialog); pixbuf = gtk_icon_info_load_symbolic_for_context_finish (GTK_ICON_INFO (info), res, NULL, &error); g_object_unref (info); if (g_cancellable_is_cancelled (callback_info->cancellable)) { g_clear_object (&pixbuf); free_named_info (callback_info); return; } if (pixbuf == NULL) { if (error && (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED)) { g_message ("%s\n", error->message); } free_named_info (callback_info); g_clear_error (&error); return; } surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, 0, gtk_widget_get_window (GTK_WIDGET (callback_info->dialog))); g_object_unref (pixbuf); /* Hash table 'takes' reference, we don't have to free surface. callback_info->name is already owned by priv->full_icon_list so it needs to be copied */ g_hash_table_insert (priv->surfaces_by_name, g_strdup (callback_info->name), (gpointer) surface); /* If there's a category_info, this is a category selection. */ if (callback_info->category_info) { add_named_entry (callback_info, surface); if (callback_info->chunk_end) { g_idle_add ((GSourceFunc) load_next_category_chunk, callback_info); return; } } /* Otherwise, it's a search result set */ else { add_named_entry (callback_info, surface); if (callback_info->chunk_end) { g_idle_add ((GSourceFunc) load_next_name_search_chunk, callback_info); return; } } free_named_info (callback_info); } #define CATEGORY_CHUNK_SIZE 500 static void load_icons_for_category (XAppIconChooserDialog *dialog, IconCategoryInfo *category_info, guint icon_size) { XAppIconChooserDialogPrivate *priv; GtkIconTheme *theme; gint chunk_count; gint scale; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); theme = gtk_icon_theme_get_default (); scale = gtk_widget_get_scale_factor (GTK_WIDGET (dialog)); for (chunk_count = 0; chunk_count < CATEGORY_CHUNK_SIZE; chunk_count++) { if (category_info->iter == NULL) { category_info->iter = category_info->icons; } else { category_info->iter = category_info->iter->next; } if (category_info->iter) { NamedIconInfoLoadCallbackInfo *callback_info; const gchar *name = category_info->iter->data; cairo_surface_t *surface; callback_info = g_new0 (NamedIconInfoLoadCallbackInfo, 1); callback_info->dialog = dialog; callback_info->category_info = category_info; callback_info->model = category_info->model; callback_info->cancellable = g_object_ref (priv->cancellable); callback_info->name = name; callback_info->chunk_end = (chunk_count == CATEGORY_CHUNK_SIZE - 1); surface = g_hash_table_lookup (priv->surfaces_by_name, name); if (surface != NULL) { callback_info->surface = cairo_surface_reference (surface); g_idle_add ((GSourceFunc) add_named_entry_with_existing_surface, callback_info); } else { GtkIconInfo *info; GtkStyleContext *context; info = gtk_icon_theme_lookup_icon_for_scale (theme, name, icon_size, scale, GTK_ICON_LOOKUP_FORCE_SIZE); if (info == NULL) { // this shouldn't be the case most of the time, but if a custom category is defined it's possible // the icon doesn't exist. In that case it's best to just skip over it since trying to load it will // lead to a segfault. continue; } context = gtk_widget_get_style_context (priv->icon_view); gtk_icon_info_load_symbolic_for_context_async (info, context, NULL, (GAsyncReadyCallback) (finish_pixbuf_load_from_name), callback_info); } } else { gtk_widget_hide (priv->loading_bar); break; // Quit the count early, we're out of data } } } static void on_category_selected (GtkListBox *list_box, XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; GList *selection; GtkWidget *selected; IconCategoryInfo *category_info; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); clear_search_state (dialog); selection = gtk_list_box_get_selected_rows (GTK_LIST_BOX (priv->list_box)); if (!selection) { return; } gtk_widget_show (priv->loading_bar); g_signal_handler_block (priv->search_bar, priv->search_changed_id); gtk_entry_set_text (GTK_ENTRY (priv->search_bar), ""); g_signal_handler_unblock (priv->search_bar, priv->search_changed_id); selected = selection->data; category_info = g_hash_table_lookup (priv->categories, selected); priv->cancellable = g_cancellable_new (); #if DEBUG_REFS g_object_weak_ref (G_OBJECT (priv->cancellable), (GWeakNotify) on_cancellable_finalize, priv); #endif priv->current_category = category_info; gtk_list_store_clear (GTK_LIST_STORE (category_info->model)); gtk_icon_view_set_model (GTK_ICON_VIEW (priv->icon_view), GTK_TREE_MODEL (category_info->model)); load_icons_for_category (dialog, category_info, priv->icon_size); gtk_adjustment_set_value (gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->icon_view)), 0.0); g_list_free (selection); } #define SEARCH_CHUNK_SIZE 2 static void search_path (XAppIconChooserDialog *dialog, const gchar *path_string, GtkListStore *icon_store) { XAppIconChooserDialogPrivate *priv; gchar *search_str = NULL; GFile *dir; GFileInfo *child_info = NULL;; gint chunk_count; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); if (g_file_test (path_string, G_FILE_TEST_IS_DIR)) { dir = g_file_new_for_path (path_string); } else { GFile *file; file = g_file_new_for_path (path_string); dir = g_file_get_parent (file); search_str = g_file_get_basename (file); g_object_unref (file); } if (!g_file_query_exists (dir, NULL) || g_file_query_file_type (dir, G_FILE_QUERY_INFO_NONE, NULL) != G_FILE_TYPE_DIRECTORY) { g_free (search_str); g_object_unref (dir); return; } if (!priv->search_file_enumerator) { priv->search_file_enumerator = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE "," G_FILE_ATTRIBUTE_STANDARD_SIZE "," G_FILE_ATTRIBUTE_STANDARD_NAME, G_FILE_QUERY_INFO_NONE, NULL, NULL); g_object_add_toggle_ref (G_OBJECT (priv->search_file_enumerator), (GToggleNotify) on_enumerator_toggle_ref_called, dialog); #if DEBUG_REFS g_object_weak_ref (G_OBJECT (priv->search_file_enumerator), (GWeakNotify) on_enumerator_finalize, dialog); #endif } chunk_count = 0; while (chunk_count < SEARCH_CHUNK_SIZE) { const gchar *child_name; gchar *child_path; GFile *child; GError *error = NULL; g_clear_object (&child_info); child_info = g_file_enumerator_next_file (priv->search_file_enumerator, NULL, NULL); if (!child_info) { break; } child_name = g_file_info_get_name (child_info); child = g_file_enumerator_get_child (priv->search_file_enumerator, child_info); child_path = g_file_get_path (child); if (search_str == NULL || g_str_has_prefix (child_name, search_str)) { priv->current_category = NULL; const gchar *content_type; content_type = g_file_info_get_attribute_string (child_info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE); if (content_type == NULL) { content_type = g_file_info_get_attribute_string (child_info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE); } if (content_type && g_content_type_is_a (content_type, "image/*")) { GFileInputStream *stream; stream = g_file_read (child, NULL, &error); if (stream != NULL) { FileIconInfoLoadCallbackInfo *callback_info; gint scale; callback_info = g_new0 (FileIconInfoLoadCallbackInfo, 1); callback_info->dialog = dialog; callback_info->model = icon_store; callback_info->cancellable = g_object_ref (priv->cancellable); callback_info->enumerator = g_object_ref (priv->search_file_enumerator); callback_info->short_name = g_strdup (child_name); callback_info->long_name = g_strdup (child_path); callback_info->chunk_end = (chunk_count == SEARCH_CHUNK_SIZE - 1); scale = gtk_widget_get_scale_factor (GTK_WIDGET (dialog)); gdk_pixbuf_new_from_stream_at_scale_async (G_INPUT_STREAM (stream), -1, priv->icon_size * scale, TRUE, NULL, (GAsyncReadyCallback) finish_pixbuf_load_from_file, callback_info); chunk_count ++; } else { if (error) { g_message ("%s\n", error->message); g_error_free (error); } } } } g_free (child_path); g_object_unref (child); } if (!child_info) { if (priv->search_file_enumerator) { g_object_unref (priv->search_file_enumerator); } gtk_widget_hide (priv->loading_bar); } else { g_clear_object (&child_info); } g_free (search_str); g_object_unref (dir); } static void search_icon_name (XAppIconChooserDialog *dialog, const gchar *name_string, GtkListStore *icon_store) { XAppIconChooserDialogPrivate *priv; GtkIconTheme *theme; GList *icons; gint chunk_count; gint scale; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); theme = gtk_icon_theme_get_default (); scale = gtk_widget_get_scale_factor (GTK_WIDGET (dialog)); icons = priv->full_icon_list; chunk_count = 0; while (chunk_count < SEARCH_CHUNK_SIZE) { if (priv->search_iter == NULL) { priv->search_iter = icons; } else { priv->search_iter = priv->search_iter->next; } if (priv->search_iter) { priv->current_category = NULL; gchar *casefolded = g_utf8_casefold (priv->search_iter->data, -1); if (g_strrstr (casefolded, name_string)) { NamedIconInfoLoadCallbackInfo *callback_info; cairo_surface_t *surface; const gchar *name = priv->search_iter->data; callback_info = g_new0 (NamedIconInfoLoadCallbackInfo, 1); callback_info->dialog = dialog; callback_info->model = priv->search_icon_store; callback_info->cancellable = g_object_ref (priv->cancellable); callback_info->category_info = NULL; callback_info->name = name; callback_info->chunk_end = (chunk_count == SEARCH_CHUNK_SIZE - 1); surface = g_hash_table_lookup (priv->surfaces_by_name, name); if (surface != NULL) { callback_info->surface = cairo_surface_reference (surface); g_idle_add ((GSourceFunc) add_named_entry_with_existing_surface, callback_info); } else { GtkIconInfo *info; GtkStyleContext *context; info = gtk_icon_theme_lookup_icon_for_scale (theme, name, priv->icon_size, scale, GTK_ICON_LOOKUP_FORCE_SIZE); context = gtk_widget_get_style_context (priv->icon_view); gtk_icon_info_load_symbolic_for_context_async (info, context, NULL, (GAsyncReadyCallback) (finish_pixbuf_load_from_name), callback_info); } chunk_count++; } g_free (casefolded); } else { gtk_widget_hide (priv->loading_bar); break; // Quit the count early, we're out of data } } } static void on_search_text_changed (GtkSearchEntry *entry, XAppIconChooserDialog *dialog) { XAppIconChooserDialogPrivate *priv; const gchar *search_text; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); /* The search cancellable is carried in search callback data. If the * text changes, we cancel it here, our load callbacks will check the * state, and react appropriately (like not adding results to the model). */ clear_search_state (dialog); gtk_list_box_select_row (GTK_LIST_BOX (priv->list_box), NULL); priv->cancellable = g_cancellable_new (); #if DEBUG_REFS g_object_weak_ref (G_OBJECT (priv->cancellable), (GWeakNotify) on_cancellable_finalize, dialog); #endif search_text = gtk_entry_get_text (GTK_ENTRY (entry)); if (g_strcmp0 (search_text, "") == 0) { g_clear_pointer (&priv->current_text, g_free); g_clear_pointer (&priv->icon_string, g_free); gtk_widget_hide (priv->loading_bar); gtk_list_store_clear (GTK_LIST_STORE (priv->search_icon_store)); } else if (strlen (search_text) < 2) { return; } else { g_clear_pointer (&priv->current_text, g_free); gtk_widget_show (priv->loading_bar); gtk_list_store_clear (GTK_LIST_STORE (priv->search_icon_store)); gtk_icon_view_set_model (GTK_ICON_VIEW (priv->icon_view), GTK_TREE_MODEL (priv->search_icon_store)); if (g_strrstr (search_text, "/")) { if (priv->allow_paths) { priv->current_text = g_strdup (search_text); search_path (dialog, priv->current_text, priv->search_icon_store); } } else { priv->current_text = g_utf8_casefold (search_text, -1); search_icon_name (dialog, priv->current_text, priv->search_icon_store); } } } static void on_icon_view_selection_changed (GtkIconView *icon_view, gpointer user_data) { XAppIconChooserDialogPrivate *priv; GList *selected_items; gchar *icon_string = NULL; priv = xapp_icon_chooser_dialog_get_instance_private (user_data); selected_items = gtk_icon_view_get_selected_items (icon_view); if (selected_items == NULL) { gtk_widget_set_sensitive (GTK_WIDGET (priv->select_button), FALSE); } else { GtkTreePath *tree_path; GtkTreeModel *model; GtkTreeIter iter; gtk_widget_set_sensitive (GTK_WIDGET (priv->select_button), TRUE); tree_path = selected_items->data; model = gtk_icon_view_get_model (icon_view); gtk_tree_model_get_iter (model, &iter, tree_path); gtk_tree_model_get (model, &iter, COLUMN_FULL_NAME, &icon_string, -1); } if (priv->icon_string != NULL) { g_free (priv->icon_string); } priv->icon_string = icon_string; g_list_free_full (selected_items, (GDestroyNotify) gtk_tree_path_free); } static void on_icon_store_icons_added (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) { XAppIconChooserDialogPrivate *priv; GtkTreePath *new_path; priv = xapp_icon_chooser_dialog_get_instance_private (user_data); if (tree_model != gtk_icon_view_get_model (GTK_ICON_VIEW (priv->icon_view))) { return; } new_path = gtk_tree_path_new_first (); gtk_icon_view_select_path (GTK_ICON_VIEW (priv->icon_view), new_path); gtk_tree_path_free (new_path); } static void on_browse_button_clicked (GtkButton *button, gpointer user_data) { XAppIconChooserDialog *dialog = user_data; XAppIconChooserDialogPrivate *priv; GtkWidget *file_dialog; const gchar *search_text; GtkFileFilter *file_filter; gint response; priv = xapp_icon_chooser_dialog_get_instance_private (dialog); file_dialog = gtk_file_chooser_dialog_new (_("Select image file"), GTK_WINDOW (dialog), GTK_FILE_CHOOSER_ACTION_OPEN, _("Cancel"), GTK_RESPONSE_CANCEL, _("Open"), GTK_RESPONSE_ACCEPT, NULL); search_text = gtk_entry_get_text (GTK_ENTRY (priv->search_bar)); if (g_strrstr (search_text, "/")) { gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (file_dialog), search_text); } else { gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_dialog), "/usr/share/icons/"); } file_filter = gtk_file_filter_new (); gtk_file_filter_set_name (file_filter, _("Image")); gtk_file_filter_add_pixbuf_formats (file_filter); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_dialog), file_filter); response = gtk_dialog_run (GTK_DIALOG (file_dialog)); if (response == GTK_RESPONSE_ACCEPT) { gchar *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_dialog)); gtk_entry_set_text (GTK_ENTRY (priv->search_bar), filename); g_free (filename); } gtk_widget_destroy (file_dialog); } static void on_select_button_clicked (GtkButton *button, gpointer user_data) { xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), GTK_RESPONSE_OK); } static void on_cancel_button_clicked (GtkButton *button, gpointer user_data) { xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), GTK_RESPONSE_CANCEL); } static gboolean on_delete_event (GtkWidget *widget, GdkEventAny *event) { xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (widget), GTK_RESPONSE_CANCEL); return TRUE; } static void on_icon_view_item_activated (GtkIconView *iconview, GtkTreePath *path, gpointer user_data) { xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), GTK_RESPONSE_OK); } static gboolean on_search_bar_key_pressed (GtkWidget *widget, GdkEvent *event, gpointer user_data) { XAppIconChooserDialogPrivate *priv; guint keyval; priv = xapp_icon_chooser_dialog_get_instance_private (user_data); gdk_event_get_keyval (event, &keyval); switch (keyval) { case GDK_KEY_Escape: xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), GTK_RESPONSE_CANCEL); return TRUE; case GDK_KEY_Return: case GDK_KEY_KP_Enter: if (priv->icon_string != NULL) { xapp_icon_chooser_dialog_close (XAPP_ICON_CHOOSER_DIALOG (user_data), GTK_RESPONSE_OK); } return TRUE; } return FALSE; } static void on_default_button_clicked (GtkButton *button, gpointer user_data) { XAppIconChooserDialogPrivate *priv; priv = xapp_icon_chooser_dialog_get_instance_private (user_data); gtk_entry_set_text (GTK_ENTRY (priv->search_bar), priv->default_icon); } xapp-2.8.8/libxapp/xapp-visibility-group.h0000664000175000017500000000430014736763051017535 0ustar fabiofabio#ifndef __XAPP_VISIBILITY_GROUP_H__ #define __XAPP_VISIBILITY_GROUP_H__ #include #include G_BEGIN_DECLS #define XAPP_TYPE_VISIBILITY_GROUP xapp_visibility_group_get_type () typedef struct _XAppVisibilityGroup XAppVisibilityGroup; /** * XAppVisibilityGroup: * @widgets: (element-type Gtk.Widget) (transfer none) (nullable): The #GtkWidget members of this group. * @visible: The current visible state of the group. There is no guarantee that all members are actually in this state. * @sensitive: The current sensitive state of the group. There is no guarantee that all members are actually in this state. * * A group of widgets that can have their visibility and sensitivity controlled together. */ struct _XAppVisibilityGroup { GSList *widgets; gboolean visible; gboolean sensitive; }; GType xapp_visibility_group_get_type (void) G_GNUC_CONST; XAppVisibilityGroup *xapp_visibility_group_new (gboolean visible, gboolean sensitive, GSList *widgets); void xapp_visibility_group_free (XAppVisibilityGroup *group); void xapp_visibility_group_add_widget (XAppVisibilityGroup *group, GtkWidget *widget); gboolean xapp_visibility_group_remove_widget (XAppVisibilityGroup *group, GtkWidget *widget); void xapp_visibility_group_hide (XAppVisibilityGroup *group); void xapp_visibility_group_show (XAppVisibilityGroup *group); void xapp_visibility_group_set_visible (XAppVisibilityGroup *group, gboolean visible); gboolean xapp_visibility_group_get_visible (XAppVisibilityGroup *group); void xapp_visibility_group_set_sensitive (XAppVisibilityGroup *group, gboolean sensitive); gboolean xapp_visibility_group_get_sensitive (XAppVisibilityGroup *group); GSList * xapp_visibility_group_get_widgets (XAppVisibilityGroup *group); void xapp_visibility_group_set_widgets (XAppVisibilityGroup *group, GSList *widgets); G_END_DECLS #endif /* __XAPP_VISIBILITY_GROUP_H__ */ xapp-2.8.8/libxapp/xapp-favorites.h0000664000175000017500000000736014736763051016227 0ustar fabiofabio#ifndef __XAPP_FAVORITES_H__ #define __XAPP_FAVORITES_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_FAVORITE_INFO (xapp_favorite_info_get_type ()) typedef struct _XAppFavoriteInfo XAppFavoriteInfo; #define XAPP_TYPE_FAVORITES (xapp_favorites_get_type ()) G_DECLARE_FINAL_TYPE (XAppFavorites, xapp_favorites, XAPP, FAVORITES, GObject) XAppFavorites *xapp_favorites_get_default (void); GList *xapp_favorites_get_favorites (XAppFavorites *favorites, const gchar * const *mimetypes); gint xapp_favorites_get_n_favorites (XAppFavorites *favorites); XAppFavoriteInfo *xapp_favorites_find_by_display_name (XAppFavorites *favorites, const gchar *display_name); XAppFavoriteInfo *xapp_favorites_find_by_uri (XAppFavorites *favorites, const gchar *uri); void xapp_favorites_add (XAppFavorites *favorites, const gchar *uri); void xapp_favorites_remove (XAppFavorites *favorites, const gchar *uri); void xapp_favorites_launch (XAppFavorites *favorites, const gchar *uri, guint32 timestamp); void xapp_favorites_rename (XAppFavorites *favorites, const gchar *old_uri, const gchar *new_uri); /** * XAppFavoriteInfo: * @uri: The uri to the favorite file. * @display_name: The name for use when displaying the item. This may not exactly match * the filename if there are files with the same name but in different folders. * @cached_mimetype: The mimetype calculated for the uri when it was added to favorites. * * Information related to a single favorite file. */ struct _XAppFavoriteInfo { gchar *uri; gchar *display_name; gchar *cached_mimetype; }; GType xapp_favorite_info_get_type (void) G_GNUC_CONST; XAppFavoriteInfo *xapp_favorite_info_copy (const XAppFavoriteInfo *info); void xapp_favorite_info_free (XAppFavoriteInfo *info); /* XAppFavoritesMenu */ /** * FavoritesItemSelectedCallback * @favorites: the #XAppFavorites instance * @uri: the uri of the favorite that was selected * @user_data: Callback data * * Callback when an item has been selected from the favorites * #GtkMenu. */ typedef void (* XAppFavoritesItemSelectedCallback) (XAppFavorites *favorites, const gchar *uri, gpointer user_data); GtkWidget *xapp_favorites_create_menu (XAppFavorites *favorites, const gchar **mimetypes, XAppFavoritesItemSelectedCallback callback, gpointer user_data, GDestroyNotify func); GList *xapp_favorites_create_actions (XAppFavorites *favorites, const gchar **mimetypes); G_END_DECLS #endif /* __XAPP_FAVORITES_H__ */ xapp-2.8.8/libxapp/xapp-gtk-window.h0000664000175000017500000000623314736763051016315 0ustar fabiofabio#ifndef __XAPP_GTK_WINDOW_H__ #define __XAPP_GTK_WINDOW_H__ #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_GTK_WINDOW (xapp_gtk_window_get_type ()) G_DECLARE_DERIVABLE_TYPE (XAppGtkWindow, xapp_gtk_window, XAPP, GTK_WINDOW, GtkWindow) struct _XAppGtkWindowClass { GtkWindowClass parent_class; gpointer padding[12]; }; /* Class */ GtkWidget *xapp_gtk_window_new (GtkWindowType type); void xapp_gtk_window_set_icon_name (XAppGtkWindow *window, const gchar *icon_name); void xapp_gtk_window_set_icon_from_file (XAppGtkWindow *window, const gchar *file_name, GError **error); void xapp_gtk_window_set_progress (XAppGtkWindow *window, gint progress); void xapp_gtk_window_set_progress_pulse (XAppGtkWindow *window, gboolean pulse); /* Wrappers (for GtkWindow subclasses like GtkDialog)*/ void xapp_set_window_icon_name (GtkWindow *window, const gchar *icon_name); void xapp_set_window_icon_from_file (GtkWindow *window, const gchar *file_name, GError **error); void xapp_set_window_progress (GtkWindow *window, gint progress); void xapp_set_window_progress_pulse (GtkWindow *window, gboolean pulse); /* Low level for X11 Window xid's */ void xapp_set_xid_icon_name (gulong xid, const gchar *icon_name); void xapp_set_xid_icon_from_file (gulong xid, const gchar *file_name); void xapp_set_xid_progress (gulong xid, gint progress); void xapp_set_xid_progress_pulse (gulong xid, gboolean pulse); G_END_DECLS #endif /* __XAPP_GTK_WINDOW_H__ */ xapp-2.8.8/libxapp/xapp-kbd-layout-controller.c0000664000175000017500000005326014736763051020454 0ustar fabiofabio #include #include #include #include #include #include #include #include #include #include "xapp-kbd-layout-controller.h" /** * SECTION:xapp-kbd-layout-controller * @Short_description: Keyboard layout selection UI element provider. * @Title: XAppKbdLayoutController * * A GObject wrapper for Gkbd that provides additional UI element * support for keyboard layout flags and abbreviations, as well as * Wfacilities to distinguish regional and hardware-based variants * which might otherwise appear identical in a layout list. */ enum { PROP_0, PROP_ENABLED }; enum { KBD_LAYOUT_CHANGED, KBD_CONFIG_CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0, }; typedef struct { gchar *group_name; gchar *variant_name; gchar *group_label; gint group_dupe_id; gchar *variant_label; gint variant_dupe_id; } GroupData; #define GROUP_DATA(ptr, idx) ((GroupData *) g_ptr_array_index (ptr, idx)) static void group_data_free (GroupData *data) { g_clear_pointer (&data->group_name, g_free); g_clear_pointer (&data->group_label, g_free); g_clear_pointer (&data->variant_label, g_free); data->group_dupe_id = 0; data->variant_dupe_id = 0; g_slice_free (GroupData, data); } struct _XAppKbdLayoutControllerPrivate { GkbdConfiguration *config; guint num_groups; GPtrArray *group_data; gulong changed_id; gulong group_changed_id; guint idle_changed_id; gboolean enabled; }; G_DEFINE_TYPE_WITH_PRIVATE (XAppKbdLayoutController, xapp_kbd_layout_controller, G_TYPE_OBJECT); static void clear_stores (XAppKbdLayoutController *controller) { XAppKbdLayoutControllerPrivate *priv = controller->priv; g_clear_pointer (&priv->group_data, g_ptr_array_unref); } static gchar * create_label (XAppKbdLayoutController *controller, const gchar *name, gint dupe_id) { if (g_utf8_validate (name, -1, NULL)) { gchar utf8[20]; gchar *utf8_cased = NULL; g_utf8_strncpy (utf8, name, 3); utf8_cased = g_utf8_strdown (utf8, -1); GString *string = g_string_new (utf8_cased); g_free (utf8_cased); if (dupe_id > 0) { string = g_string_append_unichar (string, 0x2080 + dupe_id); } return g_string_free (string, FALSE); } return NULL; } static void load_stores (XAppKbdLayoutController *controller) { XAppKbdLayoutControllerPrivate *priv = controller->priv; gchar **group_names = gkbd_configuration_get_group_names (priv->config); priv->num_groups = g_strv_length (group_names); /* We do nothing if there's only one keyboard layout enabled */ if (priv->num_groups == 1) { priv->enabled = FALSE; return; } priv->enabled = TRUE; /* Populate the GroupData pointer array */ gint group_dupe_id, variant_dupe_id; guint i, j; GPtrArray *list = g_ptr_array_new_with_free_func ((GDestroyNotify) group_data_free); for (i = 0; i < priv->num_groups; i++) { GroupData *data = g_slice_new0 (GroupData); /* Iterate through group names, figure out subscript values for duplicates */ gchar *group_name = gkbd_configuration_get_group_name (priv->config, i); group_dupe_id = 0; for (j = 0; j < list->len; j++) { GroupData *iter = g_ptr_array_index (list, j); if (g_strcmp0 (group_name, iter->group_name) == 0) { group_dupe_id++; iter->group_dupe_id = group_dupe_id; } } if (group_dupe_id > 0) { group_dupe_id++; } data->group_name = group_name; data->group_dupe_id = group_dupe_id; /* Iterate through layout/variant names, figure out subscript values for duplicates */ gchar *variant_name = gkbd_configuration_extract_layout_name (priv->config, i); variant_dupe_id = 0; for (j = 0; j < list->len; j++) { GroupData *iter = g_ptr_array_index (list, j); if (g_strcmp0 (variant_name, iter->variant_name) == 0) { variant_dupe_id++; iter->variant_dupe_id = variant_dupe_id; } } if (variant_dupe_id > 0) { variant_dupe_id++; } data->variant_name = variant_name; data->variant_dupe_id = variant_dupe_id; /* Finally, add the GroupData slice to the array */ g_ptr_array_add (list, data); } for (i = 0; i < priv->num_groups; i++) { GroupData *data = g_ptr_array_index (list, i); /* Now generate labels for group names and for variant names. This is done * in its own loop after the initial run, because previous dupe ids could have * changed later in the loop. */ data->group_label = create_label (controller, data->group_name, data->group_dupe_id); data->variant_label = create_label (controller, data->variant_name, data->variant_dupe_id); } priv->group_data = list; } static gboolean idle_config_changed (XAppKbdLayoutController *controller) { XAppKbdLayoutControllerPrivate *priv = controller->priv; clear_stores (controller); load_stores (controller); if (gkbd_configuration_get_current_group (priv->config) >= priv->num_groups) { xapp_kbd_layout_controller_set_current_group (controller, 0); } g_signal_emit (controller, signals[KBD_CONFIG_CHANGED], 0); priv->idle_changed_id = 0; return FALSE; } static void on_configuration_changed (GkbdConfiguration *config, XAppKbdLayoutController *controller) { XAppKbdLayoutControllerPrivate *priv = controller->priv; if (priv->idle_changed_id != 0) { g_source_remove (priv->idle_changed_id); priv->idle_changed_id = 0; } priv->idle_changed_id = g_idle_add ((GSourceFunc) idle_config_changed, controller); } static void on_configuration_group_changed (GkbdConfiguration *config, gint group, XAppKbdLayoutController *controller) { g_signal_emit (controller, signals[KBD_LAYOUT_CHANGED], 0, (guint) group); } static void xapp_kbd_layout_controller_init (XAppKbdLayoutController *controller) { controller->priv = xapp_kbd_layout_controller_get_instance_private (controller); XAppKbdLayoutControllerPrivate *priv = controller->priv; priv->config = gkbd_configuration_get (); priv->enabled = FALSE; priv->idle_changed_id = 0; priv->group_data = NULL; } static void xapp_kbd_layout_controller_constructed (GObject *object) { G_OBJECT_CLASS (xapp_kbd_layout_controller_parent_class)->constructed (object); XAppKbdLayoutController *controller = XAPP_KBD_LAYOUT_CONTROLLER (object); XAppKbdLayoutControllerPrivate *priv = controller->priv; gkbd_configuration_start_listen (priv->config); priv->changed_id = g_signal_connect_object (priv->config, "changed", G_CALLBACK (on_configuration_changed), controller, 0); priv->group_changed_id = g_signal_connect_object (priv->config, "group-changed", G_CALLBACK (on_configuration_group_changed), controller, 0); clear_stores (controller); load_stores (controller); } static void xapp_kbd_layout_controller_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { XAppKbdLayoutController *controller = XAPP_KBD_LAYOUT_CONTROLLER (gobject); XAppKbdLayoutControllerPrivate *priv = controller->priv; switch (prop_id) { case PROP_ENABLED: g_value_set_boolean (value, priv->enabled); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } } static void xapp_kbd_layout_controller_dispose (GObject *object) { XAppKbdLayoutController *controller = XAPP_KBD_LAYOUT_CONTROLLER (object); XAppKbdLayoutControllerPrivate *priv = controller->priv; gkbd_configuration_stop_listen (priv->config); clear_stores (controller); if (priv->changed_id > 0) { g_signal_handler_disconnect (priv->config, priv->changed_id); priv->changed_id = 0; } if (priv->group_changed_id > 0) { g_signal_handler_disconnect (priv->config, priv->group_changed_id); priv->group_changed_id = 0; } if (priv->idle_changed_id != 0) { g_source_remove (priv->idle_changed_id); priv->idle_changed_id = 0; } G_OBJECT_CLASS (xapp_kbd_layout_controller_parent_class)->dispose (object); } static void xapp_kbd_layout_controller_finalize (GObject *object) { XAppKbdLayoutController *controller = XAPP_KBD_LAYOUT_CONTROLLER (object); XAppKbdLayoutControllerPrivate *priv = controller->priv; g_clear_object (&priv->config); G_OBJECT_CLASS (xapp_kbd_layout_controller_parent_class)->finalize (object); } static void xapp_kbd_layout_controller_class_init (XAppKbdLayoutControllerClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xapp_kbd_layout_controller_dispose; gobject_class->finalize = xapp_kbd_layout_controller_finalize; gobject_class->get_property = xapp_kbd_layout_controller_get_property; gobject_class->constructed = xapp_kbd_layout_controller_constructed; g_object_class_install_property (gobject_class, PROP_ENABLED, g_param_spec_boolean ("enabled", "Enabled", "Whether we're enabled (more than one keyboard layout is installed)", FALSE, G_PARAM_READABLE) ); signals[KBD_LAYOUT_CHANGED] = g_signal_new ("layout-changed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); signals[KBD_CONFIG_CHANGED] = g_signal_new ("config-changed", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); } /** * xapp_kbd_layout_controller_new * * Creates a new XAppKbdLayoutController instance. * * Returns: (transfer full): a new #XAppKbdLayoutController instance */ XAppKbdLayoutController * xapp_kbd_layout_controller_new (void) { return g_object_new (XAPP_TYPE_KBD_LAYOUT_CONTROLLER, NULL); } /** * xapp_kbd_layout_controller_get_enabled: * @controller: the #XAppKbdLayoutController * * Returns whether or not the layout controller is enabled */ gboolean xapp_kbd_layout_controller_get_enabled (XAppKbdLayoutController *controller) { return controller->priv->enabled; } /** * xapp_kbd_layout_controller_get_current_group: * @controller: the #XAppKbdLayoutController * * Selects the previous group in the group list. */ guint xapp_kbd_layout_controller_get_current_group (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, 0); return gkbd_configuration_get_current_group (controller->priv->config); } /** * xapp_kbd_layout_controller_set_current_group * @controller: the #XAppKbdLayoutController * @group: the group number to make active * * Selects the given group number as active. */ void xapp_kbd_layout_controller_set_current_group (XAppKbdLayoutController *controller, guint group) { g_return_if_fail (controller->priv->enabled); g_return_if_fail (group <= controller->priv->num_groups); guint current = gkbd_configuration_get_current_group (controller->priv->config); if (current != group) { gkbd_configuration_lock_group (controller->priv->config, group); } } /** * xapp_kbd_layout_controller_next_group * @controller: the #XAppKbdLayoutController * * Selects the next group in the group list. */ void xapp_kbd_layout_controller_next_group (XAppKbdLayoutController *controller) { g_return_if_fail (controller->priv->enabled); gkbd_configuration_lock_next_group (controller->priv->config); } /** * xapp_kbd_layout_controller_previous_group * @controller: the #XAppKbdLayoutController * * Selects the previous group in the group list. */ void xapp_kbd_layout_controller_previous_group (XAppKbdLayoutController *controller) { g_return_if_fail (controller->priv->enabled); XAppKbdLayoutControllerPrivate *priv = controller->priv; gint current = gkbd_configuration_get_current_group (priv->config); if (current > 0) { current--; } else { current = priv->num_groups - 1; } gkbd_configuration_lock_group (controller->priv->config, current); } /** * xapp_kbd_layout_controller_get_current_name: * @controller: the #XAppKbdLayoutController * * Returns the full name of the current keyboard layout. * * Returns: (transfer full): the newly created string or NULL * if something went wrong. */ gchar * xapp_kbd_layout_controller_get_current_name (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, NULL); return gkbd_configuration_get_current_tooltip (controller->priv->config); } /** * xapp_kbd_layout_controller_get_all_names: * @controller: the #XAppKbdLayoutController * * Returns an array of all full layout names * * Returns: (transfer none) (array zero-terminated=1): array of names */ gchar ** xapp_kbd_layout_controller_get_all_names (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, NULL); return gkbd_configuration_get_group_names (controller->priv->config); } /** * xapp_kbd_layout_controller_get_current_icon_name: * @controller: the #XAppKbdLayoutController * * Returns the icon file name (no path or extension) to use for the current layout * * Returns: (transfer full): a new string with the icon name. */ gchar * xapp_kbd_layout_controller_get_current_icon_name (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; guint current = gkbd_configuration_get_current_group (priv->config); return g_strdup (GROUP_DATA (priv->group_data, current)->group_name); } /** * xapp_kbd_layout_controller_get_icon_name_for_group: * @controller: the #XAppKbdLayoutController * @group: a group number * * Returns the icon file name (no path or extension) to use for the specified layout. * * Returns: (transfer full): a new string with the icon name. */ gchar * xapp_kbd_layout_controller_get_icon_name_for_group (XAppKbdLayoutController *controller, guint group) { g_return_val_if_fail (controller->priv->enabled, NULL); g_return_val_if_fail (group <= controller->priv->num_groups, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; return g_strdup (GROUP_DATA (priv->group_data, group)->group_name); } /** * xapp_kbd_layout_controller_get_current_flag_id: * @controller: the #XAppKbdLayoutController * * Returns the duplicate id for the current layout * * Returns: the id */ gint xapp_kbd_layout_controller_get_current_flag_id (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, 0); XAppKbdLayoutControllerPrivate *priv = controller->priv; guint current = gkbd_configuration_get_current_group (priv->config); return GROUP_DATA (priv->group_data, current)->group_dupe_id; } /** * xapp_kbd_layout_controller_flag_id_for_group: * @controller: the #XAppKbdLayoutController * @group: a group number * * Returns the duplicate id for the specified layout * * Returns: the id */ gint xapp_kbd_layout_controller_get_flag_id_for_group (XAppKbdLayoutController *controller, guint group) { g_return_val_if_fail (controller->priv->enabled, 0); g_return_val_if_fail (group < controller->priv->num_groups, 0); XAppKbdLayoutControllerPrivate *priv = controller->priv; return GROUP_DATA (priv->group_data, group)->group_dupe_id; } /** * xapp_kbd_layout_controller_get_current_short_group_label: * @controller: the #XAppKbdLayoutController * * Returns the short group label (and subscript, if any) of the current layout * * Returns: (transfer full): a new string or NULL. */ gchar * xapp_kbd_layout_controller_get_current_short_group_label (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; guint current = gkbd_configuration_get_current_group (priv->config); return g_strdup (GROUP_DATA (priv->group_data, current)->group_label); } /** * xapp_kbd_layout_controller_get_short_group_label_for_group: * @controller: the #XAppKbdLayoutController * @group: a group number * * Returns the short group label and subscript of the specified layout. * * Returns: (transfer full): a new string or NULL. */ gchar * xapp_kbd_layout_controller_get_short_group_label_for_group (XAppKbdLayoutController *controller, guint group) { g_return_val_if_fail (controller->priv->enabled, NULL); g_return_val_if_fail (group < controller->priv->num_groups, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; return g_strdup (GROUP_DATA (priv->group_data, group)->group_label); } /** * xapp_kbd_layout_controller_get_current_variant_label: * @controller: the #XAppKbdLayoutController * * Returns the variant label (and subscript, if any) of the current layout * * Returns: (transfer full): a new string or NULL. */ gchar * xapp_kbd_layout_controller_get_current_variant_label (XAppKbdLayoutController *controller) { g_return_val_if_fail (controller->priv->enabled, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; guint current = gkbd_configuration_get_current_group (priv->config); return g_strdup (GROUP_DATA (priv->group_data, current)->variant_label); } /** * xapp_kbd_layout_controller_get_variant_label_for_group: * @controller: the #XAppKbdLayoutController * @group: a group number * * Returns the variant label and subscript of the specified layout. * * Returns: (transfer full): a new string or NULL. */ gchar * xapp_kbd_layout_controller_get_variant_label_for_group (XAppKbdLayoutController *controller, guint group) { g_return_val_if_fail (controller->priv->enabled, NULL); XAppKbdLayoutControllerPrivate *priv = controller->priv; g_return_val_if_fail (group < controller->priv->num_groups, NULL); return g_strdup (GROUP_DATA (priv->group_data, group)->variant_label); } /** * xapp_kbd_layout_controller_render_cairo_subscript: * @cr: a #cairo_t * @x: the x position of the drawing area * @y: the y position of the drawing area * @width: the width of the drawing area * @height: the height of the drawing area * @subscript: the number to render * * Renders a subscript number in the given work area. This should * be called from within a "draw" or "paint" widget/actor function, * where a valid cairo_t is provided to draw with. */ void xapp_kbd_layout_controller_render_cairo_subscript (cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, gint subscript) { if (subscript == 0) { return; } cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, .5); cairo_rectangle (cr, x, y, width, height); cairo_fill (cr); cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, .8); cairo_rectangle (cr, x + 1, y + 1, width - 2, height - 2); cairo_fill (cr); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); gchar *num_string = g_strdup_printf ("%d", subscript); cairo_select_font_face (cr, "sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, height - 2.0); cairo_text_extents_t ext; cairo_text_extents (cr, num_string, &ext); cairo_move_to (cr, (x + (width / 2.0) - (ext.width / 2.0)), (y + (height / 2.0) + (ext.height / 2.0))); cairo_show_text (cr, num_string); g_free (num_string); } xapp-2.8.8/libxapp/favorite-vfs-file.c0000664000175000017500000012644014736763051016603 0ustar fabiofabio#include #include #include "favorite-vfs-file.h" #include "favorite-vfs-file-enumerator.h" #include "favorite-vfs-file-monitor.h" #define DEBUG_FLAG XAPP_DEBUG_FAVORITE_VFS #include "xapp-debug.h" #define FAVORITES_SCHEMA "org.x.apps.favorites" #define FAVORITE_DCONF_METADATA_KEY "root-metadata" static GSettings *settings = NULL; G_LOCK_DEFINE_STATIC (settings); typedef struct { gchar *uri; // favorites://foo XAppFavoriteInfo *info; } FavoriteVfsFilePrivate; struct _FavoriteVfsFile { GObject parent_instance; FavoriteVfsFilePrivate *priv; }; GList *_xapp_favorites_get_display_names (XAppFavorites *favorites); static void favorite_vfs_file_gfile_iface_init (GFileIface *iface); gchar * path_to_fav_uri (const gchar *path) { g_return_val_if_fail (path != NULL, NULL); return g_strconcat (ROOT_URI, path, NULL); } gchar * fav_uri_to_display_name (const gchar *uri) { g_return_val_if_fail (uri != NULL, NULL); g_return_val_if_fail (g_str_has_prefix (uri, ROOT_URI), NULL); const gchar *ptr; ptr = uri + strlen (ROOT_URI); if (ptr[0] == '/') { ptr++; } return g_strdup (ptr); } G_DEFINE_TYPE_EXTENDED (FavoriteVfsFile, favorite_vfs_file, G_TYPE_OBJECT, 0, G_ADD_PRIVATE (FavoriteVfsFile) G_IMPLEMENT_INTERFACE (G_TYPE_FILE, favorite_vfs_file_gfile_iface_init)) static gboolean is_root_file (FavoriteVfsFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (file); return g_strcmp0 (priv->uri, ROOT_URI) == 0; } static GFile * file_dup (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); return favorite_vfs_file_new_for_uri (priv->uri); } static guint file_hash (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); return g_str_hash (priv->uri); } static gboolean file_equal (GFile *file1, GFile *file2) { FavoriteVfsFilePrivate *priv1 = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file1)); FavoriteVfsFilePrivate *priv2 = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file2)); return g_strcmp0 (priv1->uri, priv2->uri) == 0; } static gboolean file_is_native (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; gboolean is_really_native; real_file = g_file_new_for_uri (priv->info->uri); is_really_native = g_file_is_native (real_file); g_object_unref (real_file); return is_really_native; } return FALSE; } static gboolean file_has_uri_scheme (GFile *file, const gchar *uri_scheme) { return g_strcmp0 (uri_scheme, URI_SCHEME) == 0; } static gchar * file_get_uri_scheme (GFile *file) { return g_strdup (URI_SCHEME); } static gchar * file_get_basename (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info == NULL) { return g_strdup ("/"); } return g_strdup (priv->info->display_name); } static gchar * file_get_path (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (file_is_native (file)) { GFile *real_file; gchar *ret; real_file = g_file_new_for_uri (priv->info->uri); // file can't be native without an info, so we don't need to check for null here ret = g_file_get_path (real_file); g_object_unref (real_file); return ret; } // GtkFileChooser checks for a path (and not null) before allowing a shortcut to // be added using gtk_file_chooser_add_shortcut_folder_uri(). Even though this / doesn't // make much sense for favorites:/// it allows it to be added to the file chooser without // being forced to override its 'local-only' property. if (is_root_file (FAVORITE_VFS_FILE (file))) { return g_strdup ("/"); } return NULL; } static gchar * file_get_uri (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); return g_strdup (priv->uri); } static gchar * file_get_parse_name (GFile *file) { return file_get_uri (file); } static GFile * file_get_parent (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); // We're only ever one level deep. if (priv->info != NULL) { return g_file_new_for_uri (ROOT_URI); } return NULL; } static gboolean file_prefix_matches (GFile *parent, GFile *descendant) { g_autofree gchar *puri = NULL; g_autofree gchar *duri = NULL; gchar *ptr = NULL; puri = g_file_get_uri (parent); duri = g_file_get_uri (descendant); ptr = g_strstr_len (puri, -1, duri); if ((ptr == puri) && ptr[strlen (duri) + 1] == '/') { return TRUE; } return FALSE; } static gchar * file_get_relative_path (GFile *parent, GFile *descendant) { g_autofree gchar *puri = NULL; g_autofree gchar *duri = NULL; g_autofree gchar *rpath = NULL; gchar *ptr = NULL; puri = g_file_get_uri (parent); duri = g_file_get_uri (descendant); ptr = g_strstr_len (puri, -1, duri); if ((ptr == puri) && ptr[strlen (duri) + 1] == '/') { rpath = g_strdup (puri + strlen (duri) + 1); return rpath; } return NULL; } static GFile * file_resolve_relative_path (GFile *file, const gchar *relative_path) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); GFile *relative_file; gchar *uri; if (g_path_is_absolute (relative_path)) { return g_file_new_for_path (relative_path); } if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); relative_file = g_file_resolve_relative_path (real_file, relative_path); g_object_unref (real_file); return relative_file; } if (g_strcmp0 (relative_path, ".") == 0) { relative_file = file_dup (file); return relative_file; } uri = path_to_fav_uri (relative_path); relative_file = g_file_new_for_uri (uri); g_free (uri); return relative_file; } static GFile * file_get_child_for_display_name (GFile *file, const char *display_name, GError **error) { return g_file_get_child (file, display_name); } static GFile * file_set_display_name (GFile *file, const gchar *display_name, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; GFile *ret; real_file = g_file_new_for_uri (priv->info->uri); ret = g_file_set_display_name (real_file, display_name, cancellable, error); g_object_unref (real_file); return ret; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Can't rename file"); return NULL; } static GFileEnumerator * file_enumerate_children(GFile *file, const char *attributes, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); GFileEnumerator *enumerator; if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); enumerator = g_file_enumerate_children (real_file, attributes, flags, cancellable, error); g_object_unref (real_file); return enumerator; } GList *uris; uris = _xapp_favorites_get_display_names (xapp_favorites_get_default ()); enumerator = favorite_vfs_file_enumerator_new (file, attributes, flags, uris); g_list_free (uris); return enumerator; } static GFileInfo * file_query_info (GFile *file, const char *attributes, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); GFileInfo *info; GIcon *icon; info = NULL; if (priv->info != NULL) { if (!priv->info->uri) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "File not found"); return NULL; } GFile *real_file = g_file_new_for_uri (priv->info->uri); info = g_file_query_info (real_file, attributes, flags, cancellable, error); if (info != NULL) { gchar *local_path; g_file_info_set_display_name (info, priv->info->display_name); g_file_info_set_name (info, priv->info->display_name); g_file_info_set_is_symlink (info, TRUE); local_path = g_file_get_path (real_file); if (local_path != NULL) { g_file_info_set_symlink_target (info, local_path); g_free (local_path); } else { g_file_info_set_symlink_target (info, priv->info->uri); } // Recent sets this also. If it's set, this uri is used to display the "location" // for the file (the directory in which real file resides). g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, priv->info->uri); g_file_info_set_attribute_string (info, FAVORITE_AVAILABLE_METADATA_KEY, META_TRUE); } else { // This file is still in our favorites list but doesn't exist (currently). g_clear_error (error); gchar *content_type; info = g_file_info_new (); g_file_info_set_display_name (info, priv->info->display_name); g_file_info_set_name (info, priv->info->display_name); g_file_info_set_file_type (info, G_FILE_TYPE_SYMBOLIC_LINK); g_file_info_set_is_symlink (info, TRUE); g_file_info_set_symlink_target (info, priv->info->uri); g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, priv->info->uri); /* Prevent showing a 'thumbnailing' icon */ g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED, TRUE); /* This will keep the sort position the same for missing or unmounted files */ g_file_info_set_attribute_string (info, FAVORITE_METADATA_KEY, META_TRUE); g_file_info_set_attribute_string (info, FAVORITE_AVAILABLE_METADATA_KEY, META_FALSE); content_type = g_content_type_from_mime_type (priv->info->cached_mimetype); icon = g_content_type_get_icon (content_type); g_file_info_set_icon (info, icon); g_object_unref (icon); icon = g_content_type_get_symbolic_icon (content_type); g_file_info_set_symbolic_icon (info, icon); g_object_unref (icon); g_free (content_type); } g_object_unref (real_file); return info; } if (is_root_file (FAVORITE_VFS_FILE (file))) { GFileAttributeMatcher *matcher = g_file_attribute_matcher_new (attributes); info = g_file_info_new (); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_STANDARD_NAME)) g_file_info_set_name (info, "/"); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)) g_file_info_set_display_name (info, _("Favorites")); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_STANDARD_TYPE)) g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_STANDARD_ICON)) { icon = g_themed_icon_new ("xapp-user-favorites"); g_file_info_set_icon (info, icon); g_object_unref (icon); } if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON)) { icon = g_themed_icon_new ("xapp-user-favorites-symbolic"); g_file_info_set_symbolic_icon (info, icon); g_object_unref (icon); } if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_GVFS_BACKEND)) g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_GVFS_BACKEND, "favorites"); if (g_file_attribute_matcher_matches (matcher, FAVORITE_AVAILABLE_METADATA_KEY)) g_file_info_set_attribute_string (info, FAVORITE_AVAILABLE_METADATA_KEY, META_TRUE); if (g_file_attribute_matcher_enumerate_namespace (matcher, "metadata")) { G_LOCK (settings); gchar **entries = g_settings_get_strv (settings, FAVORITE_DCONF_METADATA_KEY); if (entries != NULL) { gint i; for (i = 0; entries[i] != NULL; i++) { gchar **t_n_v; t_n_v = g_strsplit (entries[i], "==", 3); if (g_strv_length (t_n_v) == 3) { if (g_strcmp0 (t_n_v[0], "string") == 0) { g_file_info_set_attribute_string (info, t_n_v[1], t_n_v[2]); } else if (g_strcmp0 (t_n_v[0], "strv") == 0) { gchar **members = g_strsplit (t_n_v[2], "|", -1); g_file_info_set_attribute_stringv (info, t_n_v[1], members); g_strfreev (members); } } g_strfreev (t_n_v); } } g_strfreev (entries); G_UNLOCK (settings); } g_file_attribute_matcher_unref (matcher); } else { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Can't retrieve info for favorite file"); } return info; } GFileInfo * file_query_filesystem_info (GFile *file, const char *attributes, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); GFileInfo *info; GFileAttributeMatcher *matcher; matcher = g_file_attribute_matcher_new (attributes); if (priv->info != NULL && priv->info->uri != NULL) { GFileInfo *info; GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); info = g_file_query_filesystem_info (real_file, attributes, cancellable, error); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY)) { g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE); } g_object_unref (real_file); g_file_attribute_matcher_unref (matcher); return info; } info = g_file_info_new (); if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE)) { g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, "favorites"); } if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY)) { g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE); } if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW)) { g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL); } g_file_attribute_matcher_unref (matcher); return info; } GMount * file_find_enclosing_mount (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GMount *mount; GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); mount = g_file_find_enclosing_mount (real_file, cancellable, error); g_object_unref (real_file); return mount; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Can't find favorite file enclosing mount"); return NULL; } GFileAttributeInfoList * file_query_settable_attributes (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFileAttributeInfoList *list; GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); list = g_file_query_settable_attributes (real_file, cancellable, error); g_object_unref (real_file); return list; } return g_file_attribute_info_list_new (); } GFileAttributeInfoList * file_query_writable_namespaces (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); GFileAttributeInfoList *list; if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; real_file = g_file_new_for_uri (priv->info->uri); list = g_file_query_writable_namespaces (real_file, cancellable, error); g_object_unref (real_file); return list; } list = g_file_attribute_info_list_new (); g_file_attribute_info_list_add (list, "metadata", G_FILE_ATTRIBUTE_TYPE_STRING, G_FILE_ATTRIBUTE_INFO_NONE); return list; } static void remove_root_metadata (const gchar *attr_name) { GPtrArray *new_array; gchar **old_metadata, **new_metadata; gint i; G_LOCK (settings); old_metadata = g_settings_get_strv (settings, FAVORITE_DCONF_METADATA_KEY); if (old_metadata == NULL) { return; } new_array = g_ptr_array_new (); for (i = 0; old_metadata[i] != NULL; i++) { gchar **t_n_v; t_n_v = g_strsplit (old_metadata[i], "==", 3); if (g_strcmp0 (t_n_v[1], attr_name) != 0) { g_ptr_array_add (new_array, g_strdup (old_metadata[i])); } g_strfreev (t_n_v); } g_ptr_array_add (new_array, NULL); g_strfreev (old_metadata); new_metadata = (gchar **) g_ptr_array_free (new_array, FALSE); g_settings_set_strv (settings, FAVORITE_DCONF_METADATA_KEY, (const gchar * const *) new_metadata); g_strfreev (new_metadata); G_UNLOCK (settings); } static void set_or_update_root_metadata (const gchar *attr_name, const gpointer value, GFileAttributeType type) { GPtrArray *new_array; gchar **old_metadata, **new_metadata; gint i; gchar *entry; gboolean exists; G_LOCK (settings); old_metadata = g_settings_get_strv (settings, FAVORITE_DCONF_METADATA_KEY); if (old_metadata == NULL) { return; } switch (type) { case G_FILE_ATTRIBUTE_TYPE_STRING: { entry = g_strdup_printf ("string==%s==%s", attr_name, (gchar *) value); break; } case G_FILE_ATTRIBUTE_TYPE_STRINGV: { gchar *val_strv = g_strjoinv ("|", (gchar **) value); entry = g_strdup_printf ("strv==%s==%s", attr_name, val_strv); g_free (val_strv); break; } default: g_warn_if_reached (); g_strfreev (old_metadata); return; } exists = FALSE; new_array = g_ptr_array_new (); for (i = 0; old_metadata[i] != NULL; i++) { gchar **t_n_v; t_n_v = g_strsplit (old_metadata[i], "==", 3); if (g_strcmp0 (t_n_v[1], attr_name) == 0) { g_ptr_array_add (new_array, entry); exists = TRUE; } else { g_ptr_array_add (new_array, g_strdup (old_metadata[i])); } g_strfreev (t_n_v); } if (!exists) { g_ptr_array_add (new_array, entry); } g_ptr_array_add (new_array, NULL); g_strfreev (old_metadata); new_metadata = (gchar **) g_ptr_array_free (new_array, FALSE); g_settings_set_strv (settings, FAVORITE_DCONF_METADATA_KEY, (const gchar * const *) new_metadata); g_strfreev (new_metadata); G_UNLOCK (settings); } gboolean file_set_attribute (GFile *file, const gchar *attribute, GFileAttributeType type, gpointer value_p, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); gboolean ret; if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; gboolean ret; real_file = g_file_new_for_uri (priv->info->uri); ret = g_file_set_attribute (real_file, attribute, type, value_p, flags, cancellable, error); g_object_unref (real_file); return ret; } ret = FALSE; if (!is_root_file (FAVORITE_VFS_FILE (file))) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Can't set attributes for %s - only the root (favorites:///) is supported.", priv->uri); } else { if (g_str_has_prefix (attribute, "metadata")) { if (type == G_FILE_ATTRIBUTE_TYPE_INVALID || value_p == NULL || ((char *) value_p)[0] == '\0') { // unset metadata remove_root_metadata (attribute); ret = TRUE; } else { if (type == G_FILE_ATTRIBUTE_TYPE_STRING || type == G_FILE_ATTRIBUTE_TYPE_STRINGV) { set_or_update_root_metadata (attribute, (gchar *) value_p, type); ret = TRUE; } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Can't set attribute '%s' for favorites:/// file " "(only string-type metadata are allowed).", attribute); } } } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Can't set attribute '%s' for favorites:/// file " "(only 'metadata' namespace is allowed).", attribute); } } return ret; } static gboolean file_set_attributes_from_info (GFile *file, GFileInfo *info, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); gboolean res; if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; gboolean ret = FALSE; real_file = g_file_new_for_uri (priv->info->uri); ret = g_file_set_attributes_from_info (real_file, info, flags, cancellable, error); g_object_unref (real_file); return ret; } res = TRUE; if (g_file_info_has_namespace (info, "metadata")) { GFileAttributeType type; gchar **attributes; gpointer value_p; gint i; attributes = g_file_info_list_attributes (info, "metadata"); for (i = 0; attributes[i] != NULL; i++) { if (g_file_info_get_attribute_data (info, attributes[i], &type, &value_p, NULL)) { if (!file_set_attribute (file, attributes[i], type, value_p, flags, cancellable, error)) { g_file_info_set_attribute_status (info, attributes[i], G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING); error = NULL; // from gvfs gdaemonvfs.c - ignore subsequent errors iterating thru attribute list. res = FALSE; } else { g_file_info_set_attribute_status (info, attributes[i], G_FILE_ATTRIBUTE_STATUS_SET); } } } g_strfreev (attributes); } return res; } static GFileInputStream * file_read_fn (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file = g_file_new_for_uri (priv->info->uri); GFileInputStream *stream; stream = g_file_read (real_file, cancellable, error); g_object_unref (real_file); return stream; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } GFileOutputStream * file_append_to (GFile *file, GFileCreateFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file = g_file_new_for_uri (priv->info->uri); GFileOutputStream *stream; stream = g_file_append_to (real_file, flags, cancellable, error); g_object_unref (real_file); return stream; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } static GFileOutputStream * file_replace (GFile *file, const char *etag, gboolean make_backup, GFileCreateFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file = g_file_new_for_uri (priv->info->uri); GFileOutputStream *stream; stream = g_file_replace (real_file, etag, make_backup, flags, cancellable, error); g_object_unref (real_file); return stream; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } static GFileIOStream * file_open_readwrite (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFileIOStream *res; GFile *real_file = g_file_new_for_uri (priv->info->uri); res = g_file_open_readwrite (real_file, cancellable, error); g_object_unref (real_file); return res; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } static GFileIOStream * file_replace_readwrite (GFile *file, const char *etag, gboolean make_backup, GFileCreateFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFileIOStream *res; GFile *real_file = g_file_new_for_uri (priv->info->uri); res = g_file_replace_readwrite (real_file, etag, make_backup, flags, cancellable, error); g_object_unref (real_file); return res; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } static gboolean file_delete (GFile *file, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (!is_root_file (FAVORITE_VFS_FILE (file))) { if (priv->info != NULL && priv->info->uri != NULL) { xapp_favorites_remove (xapp_favorites_get_default (), priv->info->uri); } else { xapp_favorites_remove (xapp_favorites_get_default (), priv->uri); } return TRUE; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return FALSE; } static gboolean file_trash (GFile *file, GCancellable *cancellable, GError **error) { return file_delete (file, cancellable, error); } gboolean file_copy (GFile *source, GFile *destination, GFileCopyFlags flags, GCancellable *cancellable, GFileProgressCallback progress_callback, gpointer progress_callback_data, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (source)); if (priv->info != NULL && priv->info->uri != NULL) { gboolean res; GFile *real_file = g_file_new_for_uri (priv->info->uri); res = g_file_copy (real_file, destination, flags, cancellable, progress_callback, progress_callback_data, error); g_object_unref (real_file); return res; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return FALSE; } static GFileMonitor * file_monitor_dir (GFile *file, GFileMonitorFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; GFileMonitor *monitor; real_file = g_file_new_for_uri (priv->info->uri); monitor = g_file_monitor_directory (real_file, flags, cancellable, error); g_object_unref (real_file); return monitor; } else if (is_root_file (FAVORITE_VFS_FILE (file))) { return favorite_vfs_file_monitor_new (); } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } static GFileMonitor * file_monitor_file (GFile *file, GFileMonitorFlags flags, GCancellable *cancellable, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { GFile *real_file; GFileMonitor *monitor; real_file = g_file_new_for_uri (priv->info->uri); monitor = g_file_monitor_file (real_file, flags, cancellable, error); g_object_unref (real_file); return monitor; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return NULL; } gboolean file_measure_disk_usage (GFile *file, GFileMeasureFlags flags, GCancellable *cancellable, GFileMeasureProgressCallback progress_callback, gpointer progress_data, guint64 *disk_usage, guint64 *num_dirs, guint64 *num_files, GError **error) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { gboolean res; GFile *real_file = g_file_new_for_uri (priv->info->uri); res = g_file_measure_disk_usage (real_file, flags, cancellable, progress_callback, progress_data, disk_usage, num_dirs, num_files, error); g_object_unref (real_file); return res; } g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Operation not supported")); return FALSE; } static void favorite_vfs_file_gfile_iface_init (GFileIface *iface) { iface->dup = file_dup; iface->hash = file_hash; iface->equal = file_equal; iface->is_native = file_is_native; iface->has_uri_scheme = file_has_uri_scheme; iface->get_uri_scheme = file_get_uri_scheme; iface->get_basename = file_get_basename; iface->get_path = file_get_path; iface->get_uri = file_get_uri; iface->get_parse_name = file_get_parse_name; iface->get_parent = file_get_parent; iface->prefix_matches = file_prefix_matches; iface->get_relative_path = file_get_relative_path; iface->resolve_relative_path = file_resolve_relative_path; iface->get_child_for_display_name = file_get_child_for_display_name; iface->set_display_name = file_set_display_name; iface->enumerate_children = file_enumerate_children; iface->query_info = file_query_info; iface->query_filesystem_info = file_query_filesystem_info; iface->find_enclosing_mount = file_find_enclosing_mount; iface->query_settable_attributes = file_query_settable_attributes; iface->query_writable_namespaces = file_query_writable_namespaces; iface->set_attribute = file_set_attribute; iface->set_attributes_from_info = file_set_attributes_from_info; iface->read_fn = file_read_fn; iface->append_to = file_append_to; // iface->create = file_create; ### Don't support iface->replace = file_replace; iface->open_readwrite = file_open_readwrite; // iface->create_readwrite = file_create_readwrite; ### Don't support iface->replace_readwrite = file_replace_readwrite; iface->delete_file = file_delete; iface->trash = file_trash; // iface->make_directory = file_make_directory; ### Don't support // iface->make_symbolic_link = file_make_symbolic_link; ### Don't support iface->copy = file_copy; iface->monitor_dir = file_monitor_dir; iface->monitor_file = file_monitor_file; iface->measure_disk_usage = file_measure_disk_usage; iface->supports_thread_contexts = TRUE; } static void favorite_vfs_file_dispose (GObject *object) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (object)); if (priv->info != NULL) { xapp_favorite_info_free (priv->info); priv->info = NULL; } G_OBJECT_CLASS (favorite_vfs_file_parent_class)->dispose (object); } static void favorite_vfs_file_finalize (GObject *object) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (object)); g_clear_pointer (&priv->uri, g_free); G_OBJECT_CLASS (favorite_vfs_file_parent_class)->finalize (object); } static void ensure_metadata_store (FavoriteVfsFile *file) { if (is_root_file (file)) { if (settings == NULL) { settings = g_settings_new (FAVORITES_SCHEMA); g_object_add_weak_pointer (G_OBJECT (settings), (gpointer) &settings); } else { g_object_ref (settings); } } } static void favorite_vfs_file_class_init (FavoriteVfsFileClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = favorite_vfs_file_dispose; gobject_class->finalize = favorite_vfs_file_finalize; } static void favorite_vfs_file_init (FavoriteVfsFile *self) { } GFile *_favorite_vfs_file_new_for_info (XAppFavoriteInfo *info) { FavoriteVfsFile *new_file; new_file = g_object_new (FAVORITE_TYPE_VFS_FILE, NULL); FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (new_file)); priv->uri = path_to_fav_uri (info->display_name); priv->info = xapp_favorite_info_copy (info); ensure_metadata_store (new_file); return G_FILE (new_file); } gchar *favorite_vfs_file_get_real_uri (GFile *file) { FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (file)); if (priv->info != NULL && priv->info->uri != NULL) { return g_strdup (priv->info->uri); } return NULL; } GFile *favorite_vfs_file_new_for_uri (const char *uri) { FavoriteVfsFile *new_file; g_autofree gchar *basename = NULL; new_file = g_object_new (FAVORITE_TYPE_VFS_FILE, NULL); DEBUG ("FavoriteVfsFile new for uri: %s", uri); FavoriteVfsFilePrivate *priv = favorite_vfs_file_get_instance_private (FAVORITE_VFS_FILE (new_file)); priv->uri = g_strdup (uri); ensure_metadata_store (new_file); if (g_strcmp0 (uri, ROOT_URI) == 0) { priv->info = NULL; } else { gchar *display_name; display_name = fav_uri_to_display_name (uri); XAppFavoriteInfo *info = xapp_favorites_find_by_display_name (xapp_favorites_get_default (), display_name); if (info != NULL) { priv->info = xapp_favorite_info_copy (info); } else { info = g_slice_new0 (XAppFavoriteInfo); info->uri = g_strdup (NULL); info->display_name = g_strdup (display_name); info->cached_mimetype = NULL; priv->info = info; } g_free (display_name); } return G_FILE (new_file); } GFile *favorite_vfs_file_new (void) { return favorite_vfs_file_new_for_uri (ROOT_URI); } static GFile * favorite_vfs_lookup (GVfs *vfs, const char *identifier, gpointer user_data) { if (g_str_has_prefix (identifier, ROOT_URI)) { return favorite_vfs_file_new_for_uri (identifier); } return NULL; } void init_favorite_vfs (void) { static gsize once_init_value = 0; if (g_once_init_enter (&once_init_value)) { GVfs *vfs; vfs = g_vfs_get_default (); g_vfs_register_uri_scheme (vfs, "favorites", favorite_vfs_lookup, NULL, NULL, favorite_vfs_lookup, NULL, NULL); g_once_init_leave (&once_init_value, 1); } } xapp-2.8.8/libxapp/favorite-vfs-file-enumerator.c0000664000175000017500000001521214736763051020754 0ustar fabiofabio#include "xapp-favorites.h" #include "favorite-vfs-file-enumerator.h" #include "favorite-vfs-file.h" #define DEBUG_FLAG XAPP_DEBUG_FAVORITE_VFS #include "xapp-debug.h" typedef struct { GFile *file; GList *uris; gchar *attributes; GFileQueryInfoFlags flags; GList *current_pos; } FavoriteVfsFileEnumeratorPrivate; struct _FavoriteVfsFileEnumerator { GObject parent_instance; FavoriteVfsFileEnumeratorPrivate *priv; }; G_DEFINE_TYPE_WITH_PRIVATE(FavoriteVfsFileEnumerator, favorite_vfs_file_enumerator, G_TYPE_FILE_ENUMERATOR) static GFileInfo * next_file (GFileEnumerator *enumerator, GCancellable *cancellable, GError **error) { FavoriteVfsFileEnumerator *self = FAVORITE_VFS_FILE_ENUMERATOR (enumerator); FavoriteVfsFileEnumeratorPrivate *priv = favorite_vfs_file_enumerator_get_instance_private (self); GFileInfo *info; if (g_cancellable_set_error_if_cancelled (cancellable, error)) { return NULL; } info = NULL; while (priv->current_pos != NULL && info == NULL) { gchar *uri; uri = path_to_fav_uri ((const gchar *) priv->current_pos->data); if (!xapp_favorites_find_by_display_name (xapp_favorites_get_default (), (gchar *) priv->current_pos->data)) { if (error) { *error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "File not found"); } g_warn_if_reached (); } else { GFile *file; file = g_file_new_for_uri (uri); info = g_file_query_info (file, priv->attributes, priv->flags, cancellable, error); g_object_unref (file); } g_free (uri); } if (priv->current_pos) { priv->current_pos = priv->current_pos->next; } return info; } static void next_async_op_free (GList *files) { g_list_free_full (files, g_object_unref); } static void next_files_async_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { FavoriteVfsFileEnumerator *self = FAVORITE_VFS_FILE_ENUMERATOR (source_object); GList *ret; GError *error = NULL; gint i, n_requested; n_requested = GPOINTER_TO_INT (g_task_get_task_data (task)); ret = NULL; for (i = 0; i < n_requested; i++) { GFileInfo *info = NULL; // g_clear_error (&error); if (g_cancellable_set_error_if_cancelled (cancellable, &error)) { g_task_return_error (task, error); return; } else { info = next_file (G_FILE_ENUMERATOR (self), cancellable, &error); } if (info != NULL) { ret = g_list_prepend (ret, info); } else { if (error) { g_critical ("ERROR: %s\n", error->message); } break; } } if (error) { g_task_return_error (task, error); } else { ret = g_list_reverse (ret); g_task_return_pointer (task, ret, (GDestroyNotify) next_async_op_free); } } static void next_files_async (GFileEnumerator *enumerator, gint num_files, gint io_priority, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { // FavoriteVfsFileEnumerator *self = FAVORITE_VFS_FILE_ENUMERATOR (enumerator); GTask *task; task = g_task_new (enumerator, cancellable, callback, user_data); g_task_set_priority (task, io_priority); g_task_set_task_data (task, GINT_TO_POINTER (num_files), NULL); g_task_run_in_thread (task, next_files_async_thread); g_object_unref (task); } static GList * next_files_finished (GFileEnumerator *enumerator, GAsyncResult *result, GError **error) { g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL); return (GList *) g_task_propagate_pointer (G_TASK (result), error); } static gboolean close_fn (GFileEnumerator *enumerator, GCancellable *cancellable, GError **error) { // FavoriteVfsFileEnumerator *self = FAVORITE_VFS_FILE_ENUMERATOR (enumerator); return TRUE; } static void favorite_vfs_file_enumerator_init (FavoriteVfsFileEnumerator *self) { } static void favorite_vfs_file_enumerator_dispose (GObject *object) { G_OBJECT_CLASS (favorite_vfs_file_enumerator_parent_class)->dispose (object); } static void favorite_vfs_file_enumerator_finalize (GObject *object) { FavoriteVfsFileEnumerator *self = FAVORITE_VFS_FILE_ENUMERATOR(object); FavoriteVfsFileEnumeratorPrivate *priv = favorite_vfs_file_enumerator_get_instance_private(self); g_list_free_full (priv->uris, (GDestroyNotify) g_free); g_free (priv->attributes); g_object_unref (priv->file); G_OBJECT_CLASS (favorite_vfs_file_enumerator_parent_class)->finalize (object); } static void favorite_vfs_file_enumerator_class_init (FavoriteVfsFileEnumeratorClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GFileEnumeratorClass *enumerator_class = G_FILE_ENUMERATOR_CLASS (klass); gobject_class->dispose = favorite_vfs_file_enumerator_dispose; gobject_class->finalize = favorite_vfs_file_enumerator_finalize; enumerator_class->next_file = next_file; enumerator_class->next_files_async = next_files_async; enumerator_class->next_files_finish = next_files_finished; enumerator_class->close_fn = close_fn; } GFileEnumerator * favorite_vfs_file_enumerator_new (GFile *file, const gchar *attributes, GFileQueryInfoFlags flags, GList *uris) { FavoriteVfsFileEnumerator *enumerator = g_object_new (FAVORITE_TYPE_VFS_FILE_ENUMERATOR, NULL); FavoriteVfsFileEnumeratorPrivate *priv = favorite_vfs_file_enumerator_get_instance_private(enumerator); priv->uris = g_list_copy_deep (uris, (GCopyFunc) g_strdup, NULL); priv->current_pos = priv->uris; priv->file = g_object_ref (file); priv->attributes = g_strdup (attributes); priv->flags = flags; return G_FILE_ENUMERATOR (enumerator); } xapp-2.8.8/libxapp/xapp-style-manager.c0000664000175000017500000001746214736763051016774 0ustar fabiofabio#include "xapp-style-manager.h" #include "xapp-util.h" /** * SECTION:xapp-style-manager * @Short_description: Convenience class for adding on the fly styling to gtk widgets. * @Title: XAppStyleManager * * #XAppStyleManager is a convenience class designed to make it easier to programmatically add style information to a widget. */ struct _XAppStyleManager { GObject parent_instance; GHashTable *properties; GtkWidget *widget; GtkCssProvider *provider; gchar *class_name; }; G_DEFINE_TYPE (XAppStyleManager, xapp_style_manager, G_TYPE_OBJECT) enum { PROP_0, PROP_WIDGET, N_PROPERTIES }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; static gint next_id = 0; static void process_property_list_update (XAppStyleManager *style_manager) { GString *css_text = g_string_new (""); GHashTableIter iter; gpointer key, value; gchar *raw_text; g_string_append (css_text, "."); g_string_append (css_text, style_manager->class_name); g_string_append (css_text, "{"); g_hash_table_iter_init (&iter, style_manager->properties); while (g_hash_table_iter_next (&iter, &key, &value)) { g_string_append (css_text, (const gchar*) key); g_string_append (css_text, ":"); g_string_append (css_text, (const gchar*) value); g_string_append (css_text, ";"); } g_string_append (css_text, "}"); raw_text = g_string_free (css_text, FALSE); gtk_css_provider_load_from_data (style_manager->provider, raw_text, -1, NULL); g_free (raw_text); } static void xapp_style_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { XAppStyleManager *style_manager = XAPP_STYLE_MANAGER (object); switch (prop_id) { case PROP_WIDGET: xapp_style_manager_set_widget (style_manager, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_style_manager_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { XAppStyleManager *style_manager = XAPP_STYLE_MANAGER (object); switch (prop_id) { case PROP_WIDGET: g_value_set_object (value, xapp_style_manager_get_widget (style_manager)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_style_manager_init (XAppStyleManager *style_manager) { style_manager->provider = gtk_css_provider_new (); style_manager->class_name = g_strdup_printf ("xapp-%d", next_id); next_id++; style_manager->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); style_manager->widget = NULL; } static void xapp_style_manager_dispose (GObject *object) { XAppStyleManager *style_manager = XAPP_STYLE_MANAGER (object); xapp_style_manager_set_widget (style_manager, NULL); g_hash_table_unref (style_manager->properties); g_object_unref (style_manager->provider); g_free (style_manager->class_name); G_OBJECT_CLASS (xapp_style_manager_parent_class)->dispose (object); } static void xapp_style_manager_class_init (XAppStyleManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = xapp_style_manager_dispose; object_class->set_property = xapp_style_manager_set_property; object_class->get_property = xapp_style_manager_get_property; /** * XAppStyleManager:widget: * * The widget to be styled. */ obj_properties[PROP_WIDGET] = g_param_spec_object ("widget", "Widget", "The widget to be styled.", GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, N_PROPERTIES, obj_properties); } /** * xapp_style_manager_new: * * Creates a new #XAppStyleManager instance * * Returns: (transfer full): a new #XAppStyleManager. Use g_object_unref when finished. * * Since: 2.2 */ XAppStyleManager * xapp_style_manager_new (void) { XAppStyleManager *style_manager; style_manager = g_object_new (XAPP_TYPE_STYLE_MANAGER, NULL); return style_manager; } /** * xapp_style_manager_get_widget: * @style_manager: a #XAppStyleManager * * Gets the #GtkWidget the style manager currently applies styles to. * * Returns: (transfer none): the #GtkWidget previously set on the style manager, or %NULL. * * Since: 2.2 */ GtkWidget * xapp_style_manager_get_widget (XAppStyleManager *style_manager) { return style_manager->widget; } /** * xapp_style_manager_set_widget: * @style_manager: a #XAppStyleManager * @widget: the #GtkWidget that the style manager will apply styles to, or * %NULL to unset the current widget and remove all styles currently set by * this #XAppStyleManager instance. * * Sets the #GtkWidget the style manager will apply styles to. * * Since: 2.2 */ void xapp_style_manager_set_widget (XAppStyleManager *style_manager, GtkWidget *widget) { GtkStyleContext *context; if (style_manager->widget) { context = gtk_widget_get_style_context (style_manager->widget); gtk_style_context_remove_provider (context, GTK_STYLE_PROVIDER (style_manager->provider)); gtk_style_context_remove_class (context, style_manager->class_name); } if (!widget) { style_manager->widget = NULL; return; } style_manager->widget = widget; context = gtk_widget_get_style_context (widget); gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (style_manager->provider), 700); gtk_style_context_add_class (context, style_manager->class_name); } /** * xapp_style_manager_set_style_property: * @style_manager: a #XAppStyleManager * @name: the property name * @value: the value to set the property to * * Adds the given style property to the widget. If the property has already been set, the value will be replaced. * * Since: 2.2 */ void xapp_style_manager_set_style_property (XAppStyleManager *style_manager, const gchar *name, const gchar *value) { g_hash_table_insert (style_manager->properties, g_strdup (name), g_strdup (value)); process_property_list_update (style_manager); } /** * xapp_style_manager_remove_style_property: * @style_manager: a #XAppStyleManager * @name: the property name * * Removes the given style property from the widget if set. * * Since: 2.2 */ void xapp_style_manager_remove_style_property (XAppStyleManager *style_manager, const gchar *name) { if (!g_hash_table_lookup (style_manager->properties, name)) return; g_hash_table_remove (style_manager->properties, name); process_property_list_update (style_manager); } /** * xapp_style_manager_set_from_pango_font_string: * @style_manager: a #XAppStyleManager * @desc_string: a pango font description string * * Sets the css font property on the widget based on the supplied pango font description string. * * Since: 2.2 */ void xapp_style_manager_set_from_pango_font_string (XAppStyleManager *style_manager, const gchar *desc_string) { gchar *css_string = xapp_pango_font_string_to_css (desc_string); xapp_style_manager_set_style_property (style_manager, "font", css_string); g_free (css_string); } xapp-2.8.8/libxapp/xapp-icon-chooser-button.h0000664000175000017500000000270714736763051020126 0ustar fabiofabio#ifndef _XAPP_ICON_CHOOSER_BUTTON_H_ #define _XAPP_ICON_CHOOSER_BUTTON_H_ #include #include #include "xapp-icon-chooser-dialog.h" #include "xapp-enums.h" G_BEGIN_DECLS #define XAPP_TYPE_ICON_CHOOSER_BUTTON (xapp_icon_chooser_button_get_type ()) G_DECLARE_FINAL_TYPE (XAppIconChooserButton, xapp_icon_chooser_button, XAPP, ICON_CHOOSER_BUTTON, GtkButton) XAppIconChooserButton * xapp_icon_chooser_button_new (void); XAppIconChooserButton * xapp_icon_chooser_button_new_with_size (GtkIconSize icon_size); void xapp_icon_chooser_button_set_icon_size (XAppIconChooserButton *button, GtkIconSize icon_size); void xapp_icon_chooser_button_set_icon (XAppIconChooserButton *button, const gchar *icon); void xapp_icon_chooser_button_set_default_category (XAppIconChooserButton *button, const gchar *category); const gchar* xapp_icon_chooser_button_get_icon (XAppIconChooserButton *button); XAppIconChooserDialog * xapp_icon_chooser_button_get_dialog (XAppIconChooserButton *button); G_END_DECLS #endif /* _XAPP_ICON_CHOOSER_DIALOG_H_ */ xapp-2.8.8/libxapp/xapp-gpu-offload-helper.h0000664000175000017500000000364014736763051017702 0ustar fabiofabio#ifndef __XAPP_GPU_OFFLOAD_HELPER_H__ #define __XAPP_GPU_OFFLOAD_HELPER_H__ #include G_BEGIN_DECLS #define XAPP_TYPE_GPU_OFFLOAD_HELPER xapp_gpu_offload_helper_get_type () G_DECLARE_FINAL_TYPE (XAppGpuOffloadHelper, xapp_gpu_offload_helper, XAPP, GPU_OFFLOAD_HELPER, GObject) #define XAPP_TYPE_GPU_INFO (xapp_gpu_info_get_type ()) typedef struct _XAppGpuInfo XAppGpuInfo; GType xapp_gpu_info_get_type (void) G_GNUC_CONST; /** * XAppGpuInfo: * @id: An identifier that can be used to refer to this GPU. * @is_default: Whether this GPU is used by default. * @display_name: User-visible name of the GPU. * @env_strv: (array zero-terminated=1): A string array containing alternating environment variables names and values to use to enable the gpu. * * Information about a single GPU used for offloading. The length of @env_strv will always be an even number. */ struct _XAppGpuInfo { gint id; gboolean is_default; gchar *display_name; gchar **env_strv; }; XAppGpuOffloadHelper *xapp_gpu_offload_helper_get (void); XAppGpuOffloadHelper *xapp_gpu_offload_helper_get_sync (void); gboolean xapp_gpu_offload_helper_is_ready (XAppGpuOffloadHelper *helper); gboolean xapp_gpu_offload_helper_is_offload_supported (XAppGpuOffloadHelper *helper); gint xapp_gpu_offload_helper_get_n_gpus (XAppGpuOffloadHelper *helper); GList *xapp_gpu_offload_helper_get_offload_infos (XAppGpuOffloadHelper *helper); XAppGpuInfo *xapp_gpu_offload_helper_get_default_info (XAppGpuOffloadHelper *helper); XAppGpuInfo *xapp_gpu_offload_helper_get_info_by_id (XAppGpuOffloadHelper *helper, gint id); gchar *xapp_gpu_info_get_shell_env_prefix (XAppGpuInfo *info); G_END_DECLS #endif /* __XAPP_GPU_OFFLOAD_HELPER_H__ */ xapp-2.8.8/libxapp/favorite-vfs-file-enumerator.h0000664000175000017500000000133214736763051020757 0ustar fabiofabio#ifndef FAVORITE_VFS_FILE_ENUMERATOR_H #define FAVORITE_VFS_FILE_ENUMERATOR_H #include #include G_BEGIN_DECLS #define FAVORITE_TYPE_VFS_FILE_ENUMERATOR favorite_vfs_file_enumerator_get_type() G_DECLARE_FINAL_TYPE (FavoriteVfsFileEnumerator, favorite_vfs_file_enumerator, \ FAVORITE, VFS_FILE_ENUMERATOR, \ GFileEnumerator) GFileEnumerator * favorite_vfs_file_enumerator_new (GFile *file, const gchar *attributes, GFileQueryInfoFlags flags, GList *favorites); G_END_DECLS #endif // FAVORITE_VFS_FILE_ENUMERATOR_H xapp-2.8.8/libxapp/xapp-favorites.c0000664000175000017500000012003114736763051016211 0ustar fabiofabio #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xapp-favorites.h" #include "favorite-vfs-file.h" #define DEBUG_FLAG XAPP_DEBUG_FAVORITES #include "xapp-debug.h" #define FAVORITES_SCHEMA "org.x.apps.favorites" #define FAVORITES_KEY "list" #define SETTINGS_DELIMITER "::" #define MAX_DISPLAY_URI_LENGTH 20 G_DEFINE_BOXED_TYPE (XAppFavoriteInfo, xapp_favorite_info, xapp_favorite_info_copy, xapp_favorite_info_free); /** * SECTION:xapp-favorites * @Short_description: Keeps track of favorite files. * @Title: XAppFavorites * * The XAppFavorites class allows applications display frequently-used files and * provide a safe mechanism for launching them. * * A list of #XAppFavoriteInfos can be retrieved in full, or only for specific mimetypes. * * A favorites uri scheme is also available if the xapp gtk3 module is loaded and this also makes the * uri available as a shortcut in file dialogs. * * XAppFavorites are new for 2.0 */ /** * xapp_favorite_info_copy: * @info: The #XAppFavoriteInfo to duplicate. * * Makes an exact copy of an existing #XAppFavoriteInfo. * * Returns: (transfer full): a new #XAppFavoriteInfo. Free using #xapp_favorite_info_free. * * Since 2.0 */ XAppFavorites *global_favorites; XAppFavoriteInfo * xapp_favorite_info_copy (const XAppFavoriteInfo *info) { // DEBUG ("XAppFavoriteInfo: copy"); g_return_val_if_fail (info != NULL, NULL); XAppFavoriteInfo *_info = g_slice_dup (XAppFavoriteInfo, info); _info->uri = g_strdup (info->uri); _info->display_name = g_strdup (info->display_name); _info->cached_mimetype = g_strdup (info->cached_mimetype); return _info; } /** * xapp_favorite_info_free: * @info: The #XAppFavoriteInfo to free. * * Destroys the #XAppFavoriteInfo. * * Since 2.0 */ void xapp_favorite_info_free (XAppFavoriteInfo *info) { DEBUG ("XAppFavoriteInfo free (%s)", info->uri); g_return_if_fail (info != NULL); g_free (info->uri); g_free (info->display_name); g_free (info->cached_mimetype); g_slice_free (XAppFavoriteInfo, info); } typedef struct { GHashTable *infos; GHashTable *menus; GSettings *settings; gulong settings_listener_id; guint changed_timer_id; } XAppFavoritesPrivate; struct _XAppFavorites { GObject parent_instance; }; G_DEFINE_TYPE_WITH_PRIVATE (XAppFavorites, xapp_favorites, G_TYPE_OBJECT) enum { CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; static void finish_add_favorite (XAppFavorites *favorites, const gchar *uri, const gchar *mimetype, gboolean from_saved); static gboolean changed_callback (gpointer data) { g_return_val_if_fail (XAPP_IS_FAVORITES (data), G_SOURCE_REMOVE); XAppFavorites *favorites = XAPP_FAVORITES (data); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); DEBUG ("XAppFavorites: list updated, emitting changed signal"); priv->changed_timer_id = 0; g_signal_emit (favorites, signals[CHANGED], 0); return G_SOURCE_REMOVE; } static void queue_changed (XAppFavorites *favorites) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); if (priv->changed_timer_id > 0) { g_source_remove (priv->changed_timer_id); } priv->changed_timer_id = g_idle_add ((GSourceFunc) changed_callback, favorites); } static void sync_metadata_callback (GObject *source, GAsyncResult *res, gpointer user_data) { // Disabled return; // GFile *file; // GError *error; // file = G_FILE (source); // error = NULL; // if (!g_file_set_attributes_finish (file, // res, // NULL, // &error)) // { // if (error != NULL) // { // if (error->code != G_IO_ERROR_NOT_FOUND) // { // g_warning ("Could not update file metadata for favorite file '%s': %s", g_file_get_uri (file), error->message); // } // g_error_free (error); // } // } // else // { // if (g_file_is_native (file)) // { // // I can't think of any other way to touch a file so a file monitor might notice // // the attribute change. It shouldn't be too much trouble since most times add/remove // // will be done in the file manager (where the update can be triggered internally). // gchar *local_path = g_file_get_path (file); // g_utime (local_path, NULL); // g_free (local_path); // } // } } static void sync_file_metadata (XAppFavorites *favorites, const gchar *uri, gboolean is_favorite) { /* Disabled - this is less than optimal, and is implemented instead in * nemo, currently. This could be changed later to help support other browsers. * Also, this only works with local files. */ return; /* borrowed from nemo-vfs-file.c */ GFileInfo *info; GFile *file; DEBUG ("Sync metadata: %s - Favorite? %d", uri, is_favorite); info = g_file_info_new (); if (is_favorite) { g_file_info_set_attribute_string (info, FAVORITE_METADATA_KEY, META_TRUE); } else { /* Unset the key */ g_file_info_set_attribute (info, FAVORITE_METADATA_KEY, G_FILE_ATTRIBUTE_TYPE_INVALID, NULL); } file = g_file_new_for_uri (uri); g_file_set_attributes_async (file, info, 0, G_PRIORITY_DEFAULT, NULL, sync_metadata_callback, favorites); g_object_unref (file); g_object_unref (info); } static void store_favorites (XAppFavorites *favorites) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); GList *iter, *keys; GPtrArray *array; gchar **new_settings; array = g_ptr_array_new (); keys = g_hash_table_get_keys (priv->infos); for (iter = keys; iter != NULL; iter = iter->next) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) g_hash_table_lookup (priv->infos, iter->data); gchar *entry; entry = g_strjoin (SETTINGS_DELIMITER, info->uri, info->cached_mimetype, NULL); g_ptr_array_add (array, entry); } g_ptr_array_add (array, NULL); g_list_free (keys); new_settings = (gchar **) g_ptr_array_free (array, FALSE); g_signal_handler_block (priv->settings, priv->settings_listener_id); g_settings_set_strv (priv->settings, FAVORITES_KEY, (const gchar* const*) new_settings); g_signal_handler_unblock (priv->settings, priv->settings_listener_id); DEBUG ("XAppFavorites: store_favorites: favorites saved"); g_strfreev (new_settings); } static void load_favorites (XAppFavorites *favorites, gboolean signal_changed) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); gchar **raw_list; gint i; if (priv->infos != NULL) { g_hash_table_destroy (priv->infos); } priv->infos = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) xapp_favorite_info_free); raw_list = g_settings_get_strv (priv->settings, FAVORITES_KEY); if (!raw_list) { // no favorites return; } for (i = 0; i < g_strv_length (raw_list); i++) { gchar **entry = g_strsplit (raw_list[i], SETTINGS_DELIMITER, 2); finish_add_favorite (favorites, entry[0], // uri entry[1], // cached_mimetype TRUE); g_strfreev (entry); } g_strfreev (raw_list); DEBUG ("XAppFavorites: load_favorite: favorites loaded (%d)", i); if (signal_changed) { queue_changed (favorites); } } static void rename_favorite (XAppFavorites *favorites, const gchar *old_uri, const gchar *new_uri) { XAppFavoriteInfo *info; XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); gchar *final_new_uri = NULL; if (g_str_has_prefix (old_uri, ROOT_URI)) { // Renaming occurred inside of favorites:/// we need to identify by // display name. const gchar *old_display_name = old_uri + strlen (ROOT_URI); const gchar *new_display_name = new_uri + strlen (ROOT_URI); info = xapp_favorites_find_by_display_name (favorites, old_display_name); if (info) { GFile *real_file, *parent, *renamed_file; real_file = g_file_new_for_uri (info->uri); parent = g_file_get_parent (real_file); renamed_file = g_file_get_child_for_display_name (parent, new_display_name, NULL); if (renamed_file != NULL) { final_new_uri = g_file_get_uri (renamed_file); } g_object_unref (real_file); g_object_unref (parent); g_clear_object (&renamed_file); } } else { info = g_hash_table_lookup (priv->infos, old_uri); final_new_uri = g_strdup (new_uri); } if (info != NULL && final_new_uri != NULL) { gchar *mimetype = g_strdup (info->cached_mimetype); sync_file_metadata (favorites, info->uri, FALSE); g_hash_table_remove (priv->infos, (gconstpointer) info->uri); finish_add_favorite (favorites, final_new_uri, mimetype, FALSE); sync_file_metadata (favorites, final_new_uri, TRUE); g_free (mimetype); } g_free (final_new_uri); } static void remove_favorite (XAppFavorites *favorites, const gchar *uri) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); gchar *real_uri; if (g_str_has_prefix (uri, "favorites")) { GFile *file = g_file_new_for_uri (uri); real_uri = favorite_vfs_file_get_real_uri (file); g_object_unref (file); } else { real_uri = g_strdup (uri); } g_return_if_fail (real_uri != NULL); DEBUG ("XAppFavorites: remove favorite: %s", real_uri); // It may be orphaned for some reason.. even if it's not in gsettings, still try // to remove the favorite attribute. sync_file_metadata (favorites, real_uri, FALSE); if (!g_hash_table_remove (priv->infos, real_uri)) { DEBUG ("XAppFavorites: remove_favorite: could not find favorite for uri '%s'", real_uri); g_free (real_uri); return; } g_free (real_uri); store_favorites (favorites); queue_changed (favorites); } static void deduplicate_display_names (XAppFavorites *favorites, GHashTable *infos) { GList *fav_uris, *ptr; GHashTable *lists_of_keys_by_basename = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); GHashTableIter iter; fav_uris = g_hash_table_get_keys (infos); for (ptr = fav_uris; ptr != NULL; ptr = ptr->next) { GList *uris; const gchar *uri = (gchar *) ptr->data; gchar *original_display_name = g_path_get_basename (uri); if (g_hash_table_contains (lists_of_keys_by_basename, original_display_name)) { uris = g_hash_table_lookup (lists_of_keys_by_basename, original_display_name); // this could be prepend, but then the value in the table would have to be replaced uris = g_list_append ((GList *) uris, g_strdup (uri)); } else { uris = g_list_prepend (NULL, g_strdup (uri)); g_hash_table_insert (lists_of_keys_by_basename, g_strdup (original_display_name), uris); } g_free (original_display_name); } g_list_free (fav_uris); gpointer key, value; g_hash_table_iter_init (&iter, lists_of_keys_by_basename); while (g_hash_table_iter_next (&iter, &key, &value)) { GList *same_names_list, *uri_ptr; gchar *common_display_name = NULL; if (((GList *) value)->next == NULL) { // Single member of current common name list; g_list_free_full ((GList *) value, g_free); continue; } // Now we know we have a list of uris that would have identical display names // Add a part of the uri after each to distinguish them. common_display_name = g_uri_unescape_string ((const gchar *) key, NULL); same_names_list = (GList *) value; for (uri_ptr = same_names_list; uri_ptr != NULL; uri_ptr = uri_ptr->next) { XAppFavoriteInfo *info; GFile *uri_file, *home_file, *parent_file; GString *new_display_string; const gchar *current_uri; current_uri = (const gchar *) uri_ptr->data; uri_file = g_file_new_for_uri (current_uri); parent_file = g_file_get_parent (uri_file); home_file = g_file_new_for_path (g_get_home_dir()); new_display_string = g_string_new (common_display_name); g_string_append (new_display_string, " ("); // How much effort should we put into duplicate naming? Keeping it // simple like this won't work all the time. gchar *parent_basename = g_file_get_basename (parent_file); g_string_append (new_display_string, parent_basename); g_free (parent_basename); // TODO: ellipsized deduplication paths? // if (g_file_has_prefix (parent_file, home_file)) // { // gchar *home_rpath = g_file_get_relative_path (home_file, parent_file); // gchar *home_basename = g_file_get_basename (home_file); // if (strlen (home_rpath) < MAX_DISPLAY_URI_LENGTH) // { // g_string_append (new_display_string, home_basename); // g_string_append (new_display_string, "/"); // g_string_append (new_display_string, home_rpath); // } // else // { // gchar *parent_basename = g_file_get_basename (parent_file); // g_string_append (new_display_string, home_basename); // g_string_append (new_display_string, "/.../"); // g_string_append (new_display_string, parent_basename); // g_free (parent_basename); // } // g_free (home_rpath); // g_free (home_basename); // } // else // { // GString *tmp_string = g_string_new (NULL); // if (g_file_is_native (parent_file)) // { // g_string_append (tmp_string, g_file_peek_path (parent_file)); // } // else // { // g_string_append (tmp_string, current_uri); // } // if (tmp_string->len > MAX_DISPLAY_URI_LENGTH) // { // gint diff; // gint replace_pos; // diff = tmp_string->len - MAX_DISPLAY_URI_LENGTH; // replace_pos = (tmp_string->len / 2) - (diff / 2) - 2; // g_string_erase (tmp_string, // replace_pos, // diff); // g_string_insert (tmp_string, // replace_pos, // "..."); // } // g_string_append (new_display_string, tmp_string->str); // g_string_free (tmp_string, TRUE); // } g_object_unref (uri_file); g_object_unref (home_file); g_object_unref (parent_file); g_string_append (new_display_string, ")"); // Look up the info from our master table info = g_hash_table_lookup (infos, current_uri); g_free (info->display_name); info->display_name = g_string_free (new_display_string, FALSE); } g_free (common_display_name); g_list_free_full (same_names_list, g_free); } // We freed the individual lists just above, only the keys will need // freed here. g_hash_table_destroy (lists_of_keys_by_basename); } static void on_display_name_received (GObject *source, GAsyncResult *res, gpointer user_data) { GFile *file; GFileInfo *file_info; GError *error; gchar *display_name; g_autofree gchar *uri = NULL; file = G_FILE (source); error = NULL; uri = g_file_get_uri (file); file_info = g_file_query_info_finish (file, res, &error); if (error) { DEBUG ("XAppFavorites: problem trying to get real display name for uri '%s': %s", uri, error->message); g_error_free (error); return; } g_return_if_fail (XAPP_IS_FAVORITES (user_data)); XAppFavorites *favorites = XAPP_FAVORITES (user_data); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); display_name = NULL; if (file_info) { XAppFavoriteInfo *info = g_hash_table_lookup (priv->infos, uri); const gchar *real_display_name = g_file_info_get_display_name (file_info); if (info != NULL && g_strcmp0 (info->display_name, real_display_name) != 0) { gchar *old_name = info->display_name; info->display_name = g_strdup (real_display_name); g_free (old_name); deduplicate_display_names (favorites, priv->infos); queue_changed (favorites); } } g_free (display_name); g_clear_object (&file_info); } static void finish_add_favorite (XAppFavorites *favorites, const gchar *uri, const gchar *cached_mimetype, gboolean from_saved) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); XAppFavoriteInfo *info; gchar *unescaped_uri; // Check if it's there again, in case it was added while we were getting mimetype. if (g_hash_table_contains (priv->infos, uri)) { DEBUG ("XAppFavorites: favorite for '%s' exists, ignoring", uri); return; } info = g_slice_new0 (XAppFavoriteInfo); info->uri = g_strdup (uri); unescaped_uri = g_uri_unescape_string (uri, NULL); info->display_name = g_path_get_basename (unescaped_uri); g_free (unescaped_uri); info->cached_mimetype = g_strdup (cached_mimetype); g_hash_table_insert (priv->infos, (gpointer) g_strdup (uri), (gpointer) info); DEBUG ("XAppFavorites: added favorite: %s", uri); deduplicate_display_names (favorites, priv->infos); GFile *gfile = g_file_new_for_uri (uri); g_file_query_info_async (gfile, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, G_FILE_QUERY_INFO_NONE, G_PRIORITY_LOW, NULL, on_display_name_received, favorites); g_object_unref (gfile); if (from_saved) { return; } store_favorites (favorites); queue_changed (favorites); } static void on_content_type_info_received (GObject *source, GAsyncResult *res, gpointer user_data) { XAppFavorites *favorites = XAPP_FAVORITES (user_data); GFile *file; GFileInfo *file_info; GError *error; gchar *cached_mimetype, *uri; file = G_FILE (source); uri = g_file_get_uri (file); error = NULL; cached_mimetype = NULL; file_info = g_file_query_info_finish (file, res, &error); if (error) { DEBUG ("XAppFavorites: problem trying to figure out content type for uri '%s': %s", uri, error->message); g_error_free (error); } if (file_info) { cached_mimetype = g_strdup (g_file_info_get_attribute_string (file_info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)); if (cached_mimetype == NULL) { cached_mimetype = g_strdup ("application/unknown"); } finish_add_favorite (favorites, uri, cached_mimetype, FALSE); sync_file_metadata (favorites, uri, TRUE); } g_free (uri); g_free (cached_mimetype); g_clear_object (&file_info); g_object_unref (file); } static void add_favorite (XAppFavorites *favorites, const gchar *uri) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); GFile *file; if (g_hash_table_contains (priv->infos, uri)) { DEBUG ("XAppFavorites: favorite for '%s' exists, ignoring", uri); return; } file = g_file_new_for_uri (uri); g_file_query_info_async (file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, G_PRIORITY_LOW, NULL, on_content_type_info_received, favorites); } static void on_settings_list_changed (GSettings *settings, gchar *key, gpointer user_data) { XAppFavorites *favorites = XAPP_FAVORITES (user_data); load_favorites (favorites, TRUE); } static void xapp_favorites_init (XAppFavorites *favorites) { XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); DEBUG ("XAppFavorites: init:"); priv->settings = g_settings_new (FAVORITES_SCHEMA); priv->settings_listener_id = g_signal_connect (priv->settings, "changed::" FAVORITES_KEY, G_CALLBACK (on_settings_list_changed), favorites); load_favorites (favorites, FALSE); } static void xapp_favorites_dispose (GObject *object) { XAppFavorites *favorites = XAPP_FAVORITES (object); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); DEBUG ("XAppFavorites dispose (%p)", object); g_clear_object (&priv->settings); g_clear_pointer (&priv->infos, g_hash_table_destroy); G_OBJECT_CLASS (xapp_favorites_parent_class)->dispose (object); } static void xapp_favorites_finalize (GObject *object) { DEBUG ("XAppFavorites finalize (%p)", object); G_OBJECT_CLASS (xapp_favorites_parent_class)->finalize (object); } static void xapp_favorites_class_init (XAppFavoritesClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xapp_favorites_dispose; gobject_class->finalize = xapp_favorites_finalize; /** * XAppFavorites::changed: * Notifies when the favorites list has changed. */ signals [CHANGED] = g_signal_new ("changed", XAPP_TYPE_FAVORITES, G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); } /** * xapp_favorites_get_default: * * Returns the #XAppFavorites instance. * * Returns: (transfer none): the XAppFavorites instance for the process. Do not free. * * Since: 2.0 */ XAppFavorites * xapp_favorites_get_default (void) { if (global_favorites == NULL) { init_favorite_vfs (); global_favorites = g_object_new (XAPP_TYPE_FAVORITES, NULL); } return global_favorites; } typedef struct { GList *items; const gchar **mimetypes; } MatchData; void match_mimetypes (gpointer key, gpointer value, gpointer user_data) { MatchData *data = (MatchData *) user_data; const XAppFavoriteInfo *info = (XAppFavoriteInfo *) value; if (data->mimetypes == NULL) { data->items = g_list_prepend (data->items, xapp_favorite_info_copy (info)); return; } gint i; for (i = 0; i < g_strv_length ((gchar **) data->mimetypes); i++) { if (g_content_type_is_mime_type (info->cached_mimetype, data->mimetypes[i])) { data->items = g_list_prepend (data->items, xapp_favorite_info_copy (info)); return; } } } /** * xapp_favorites_get_favorites: * @favorites: The #XAppFavorites * @mimetypes: (nullable) (array zero-terminated=1): The mimetypes to filter by for results * * Gets a list of all favorites. If mimetype is not %NULL, the list will * contain only favorites with that mimetype. * * Returns: (element-type XAppFavoriteInfo) (transfer full): a list of #XAppFavoriteInfos. Free the list with #g_list_free, free elements with #xapp_favorite_info_free. * * Since: 2.0 */ GList * xapp_favorites_get_favorites (XAppFavorites *favorites, const gchar * const *mimetypes) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); GList *ret = NULL; MatchData data; data.items = NULL; data.mimetypes = (const gchar **) mimetypes; g_hash_table_foreach (priv->infos, (GHFunc) match_mimetypes, &data); ret = g_list_reverse (data.items); gchar *typestring = mimetypes ? g_strjoinv (", ", (gchar **) mimetypes) : NULL; DEBUG ("XAppFavorites: get_favorites returning list for mimetype '%s' (%d items)", typestring, g_list_length (ret)); g_free (typestring); return ret; } /** * xapp_favorites_get_n_favorites: * @favorites: The #XAppFavorites * * Returns: The number of favorite files * Since: 2.0 */ gint xapp_favorites_get_n_favorites (XAppFavorites *favorites) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), 0); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); gint n; n = g_hash_table_size (priv->infos); DEBUG ("XAppFavorites: get_n_favorites returning number of items: %d.", n); return n; } static gboolean lookup_display_name (gpointer key, gpointer value, gpointer user_data) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) value; if (g_strcmp0 (info->display_name, (const gchar *) user_data) == 0) { return TRUE; } return FALSE; } /** * xapp_favorites_find_by_display_name: * @favorites: The #XAppFavorites * @display_name: (not nullable): The display name to lookup info for. * * Looks for an XAppFavoriteInfo that corresponds to @display_name. * * Returns: (transfer none): an XAppFavoriteInfo or NULL if one was not found. This is owned * by the favorites manager and should not be freed. * * Since: 2.0 */ XAppFavoriteInfo * xapp_favorites_find_by_display_name (XAppFavorites *favorites, const gchar *display_name) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); g_return_val_if_fail (display_name != NULL, NULL); XAppFavoriteInfo *info; XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); info = g_hash_table_find (priv->infos, (GHRFunc) lookup_display_name, (gpointer) display_name); if (info != NULL) { return info; } return NULL; } /** * xapp_favorites_find_by_uri: * @favorites: The #XAppFavorites * @uri: (not nullable): The uri to lookup info for. * * Looks for an XAppFavoriteInfo that corresponds to @uri. * * Returns: (transfer none): an XAppFavoriteInfo or NULL if one was not found. This is owned * by the favorites manager and should not be freed. * * Since: 2.0 */ XAppFavoriteInfo * xapp_favorites_find_by_uri (XAppFavorites *favorites, const gchar *uri) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); g_return_val_if_fail (uri != NULL, NULL); XAppFavoriteInfo *info; XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); info = g_hash_table_lookup (priv->infos, uri); if (info != NULL) { return (XAppFavoriteInfo *) info; } return NULL; } /** * xapp_favorites_add: * @favorites: The #XAppFavorites * @uri: The uri the favorite is for * * Adds a new favorite. If the uri already exists, this does nothing. * * Since: 2.0 */ void xapp_favorites_add (XAppFavorites *favorites, const gchar *uri) { g_return_if_fail (XAPP_IS_FAVORITES (favorites)); g_return_if_fail (uri != NULL); add_favorite (favorites, uri); } /** * xapp_favorites_remove: * @favorites: The #XAppFavorites * @uri: The uri for the favorite being removed * * Removes a favorite from the list. * * Since: 2.0 */ void xapp_favorites_remove (XAppFavorites *favorites, const gchar *uri) { g_return_if_fail (XAPP_IS_FAVORITES (favorites)); g_return_if_fail (uri != NULL); remove_favorite (favorites, uri); } static void launch_uri_callback (GObject *source, GAsyncResult *res, gpointer user_data) { gchar *uri = (gchar *) user_data; GError *error; error = NULL; if (!g_app_info_launch_default_for_uri_finish (res, &error)) { if (error) { DEBUG ("XAppFavorites: launch: error opening uri '%s': %s", uri, error->message); g_error_free (error); } } g_free (uri); } /** * xapp_favorites_launch: * @favorites: The #XAppFavorites * @uri: The uri for the favorite to launch * @timestamp: The timestamp from an event or 0 * * Opens a favorite in its default app. * * Since: 2.0 */ void xapp_favorites_launch (XAppFavorites *favorites, const gchar *uri, guint32 timestamp) { GdkDisplay *display; GdkAppLaunchContext *launch_context; display = gdk_display_get_default (); launch_context = gdk_display_get_app_launch_context (display); gdk_app_launch_context_set_timestamp (launch_context, timestamp); g_app_info_launch_default_for_uri_async (uri, G_APP_LAUNCH_CONTEXT (launch_context), NULL, launch_uri_callback, g_strdup (uri)); g_object_unref (launch_context); } /** * xapp_favorites_rename: * @old_uri: the old favorite's uri. * @new_uri: The new uri. * * Removes old_uri and adds new_uri. This is mainly for file managers to use as * a convenience instead of add/remove, and guarantees the result, without having to * worry about multiple dbus calls (gsettings). * * Since: 2.0 */ void xapp_favorites_rename (XAppFavorites *favorites, const gchar *old_uri, const gchar *new_uri) { g_return_if_fail (XAPP_IS_FAVORITES (favorites)); g_return_if_fail (old_uri != NULL && new_uri != NULL); rename_favorite (favorites, old_uri, new_uri); } typedef struct { XAppFavorites *favorites; guint update_id; GDestroyNotify destroy_func; gpointer user_data; } DestroyData; typedef struct { XAppFavorites *favorites; XAppFavoritesItemSelectedCallback callback; gchar *uri; gpointer user_data; } ItemCallbackData; static void cb_data_destroy_notify (gpointer callback_data, GObject *object) { DestroyData *dd = (DestroyData *) callback_data; if (dd->update_id > 0) { g_signal_handler_disconnect (dd->favorites, dd->update_id); } dd->destroy_func (dd->user_data); g_slice_free (DestroyData, dd); } static void free_item_callback_data (gpointer callback_data, GClosure *closure) { ItemCallbackData *data = (ItemCallbackData *) callback_data; g_free (data->uri); g_slice_free (ItemCallbackData, data); } static void item_activated (GObject *item, gpointer user_data) { ItemCallbackData *data = (ItemCallbackData *) user_data; data->callback (data->favorites, data->uri, data->user_data); } static void remove_menu_item (GtkWidget *item, gpointer user_data) { gtk_container_remove (GTK_CONTAINER (user_data), item); } static void populate_menu (XAppFavorites *favorites, GtkMenu *menu) { GList *fav_list, *ptr; GtkWidget *item; XAppFavoritesItemSelectedCallback callback; gpointer user_data; const gchar **mimetypes; gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback) remove_menu_item, menu); mimetypes = (const gchar **) g_object_get_data (G_OBJECT (menu), "mimetypes"); callback = g_object_get_data (G_OBJECT (menu), "activate-cb"); user_data = g_object_get_data (G_OBJECT (menu), "user-data"); fav_list = xapp_favorites_get_favorites (favorites, mimetypes); if (fav_list == NULL) { return; } for (ptr = fav_list; ptr != NULL; ptr = ptr->next) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) ptr->data; ItemCallbackData *data; if (mimetypes != NULL) { item = gtk_menu_item_new_with_label (info->display_name); } else { GtkWidget *image; GIcon *icon; icon = g_content_type_get_symbolic_icon (info->cached_mimetype); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU); g_object_unref (icon); item = gtk_image_menu_item_new_with_label (info->display_name); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); } data = g_slice_new0 (ItemCallbackData); data->favorites = favorites; data->uri = g_strdup (info->uri); data->callback = callback; data->user_data = user_data; gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); g_signal_connect_data (item, "activate", G_CALLBACK (item_activated), data, (GClosureNotify) free_item_callback_data, 0); } g_list_free_full (fav_list, (GDestroyNotify) xapp_favorite_info_free); gtk_widget_show_all (GTK_WIDGET (menu)); } static void refresh_menu_items (XAppFavorites *favorites, gpointer user_data) { g_return_if_fail (XAPP_IS_FAVORITES (favorites)); g_return_if_fail (GTK_IS_MENU (user_data)); GtkMenu *menu = GTK_MENU (user_data); populate_menu (favorites, menu); } /** * xapp_favorites_create_menu: * @favorites: The #XAppFavorites instance. * @mimetypes: (nullable): The mimetypes to filter for, or NULL to include all favorites. * @callback: (scope notified): (closure user_data): The callback to use when a menu item has been selected. * @user_data: (closure): The data to pass to the callback * @func: Destroy function for user_data * * Generates a GtkMenu widget populated with favorites. The callback will be called when * a menu item has been activated, and will include the uri of the respective item. * * Returns: (transfer full): a new #GtkMenu populated with a list of favorites, or NULL if there are no favorites. * * Since: 2.0 */ GtkWidget * xapp_favorites_create_menu (XAppFavorites *favorites, const gchar **mimetypes, XAppFavoritesItemSelectedCallback callback, gpointer user_data, GDestroyNotify func) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); GtkWidget *menu; menu = gtk_menu_new (); g_object_set_data_full (G_OBJECT (menu), "mimetype", g_strdupv ((gchar **) mimetypes), (GDestroyNotify) g_strfreev); g_object_set_data (G_OBJECT (menu), "activate-cb", callback); g_object_set_data (G_OBJECT (menu), "user-data", user_data); populate_menu (favorites, GTK_MENU (menu)); DestroyData *dd = g_slice_new0 (DestroyData); dd->destroy_func = func; dd->user_data = user_data; dd->favorites = favorites; dd->update_id = g_signal_connect (favorites, "changed", G_CALLBACK (refresh_menu_items), menu); g_object_weak_ref (G_OBJECT (menu), (GWeakNotify) cb_data_destroy_notify, dd); return menu; } static GList * populate_action_list (XAppFavorites *favorites, const gchar **mimetypes) { GList *fav_list, *ptr; GList *actions; GtkAction *action; gint i; fav_list = xapp_favorites_get_favorites (favorites, mimetypes); if (fav_list == NULL) { return NULL; } actions = NULL; for (ptr = fav_list, i = 0; ptr != NULL; ptr = ptr->next, i++) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) ptr->data; if (mimetypes != NULL) { action = g_object_new (GTK_TYPE_ACTION, "name", info->uri, "label", info->display_name, NULL); } else { GIcon *icon; icon = g_content_type_get_symbolic_icon (info->cached_mimetype); action = g_object_new (GTK_TYPE_ACTION, "name", info->uri, "label", info->display_name, "gicon", icon, NULL); g_free (icon); } actions = g_list_prepend (actions, action); } actions = g_list_reverse (actions); return actions; } /** * xapp_favorites_create_actions: * @favorites: The #XAppFavorites instance. * @mimetypes: (nullable): The mimetypes to filter for, or NULL to include all favorites. * * Generates a list of favorite GtkActions. * * Returns: (element-type Gtk.Action) (transfer full): a new #GtkActionGroup populated with a list of favorites, or NULL if there are no favorites. * Since: 2.0 */ GList * xapp_favorites_create_actions (XAppFavorites *favorites, const gchar **mimetypes) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); GList *actions; actions = populate_action_list (favorites, mimetypes); return actions; } /* Used by favorite_vfs_file */ GList * _xapp_favorites_get_display_names (XAppFavorites *favorites) { g_return_val_if_fail (XAPP_IS_FAVORITES (favorites), NULL); XAppFavoritesPrivate *priv = xapp_favorites_get_instance_private (favorites); GHashTableIter iter; GList *ret; gpointer key, value; ret = NULL; g_hash_table_iter_init (&iter, priv->infos); while (g_hash_table_iter_next (&iter, &key, &value)) { XAppFavoriteInfo *info = (XAppFavoriteInfo *) value; ret = g_list_prepend (ret, info->display_name); } ret = g_list_reverse (ret); return ret; } xapp-2.8.8/libxapp/xapp-util.h0000664000175000017500000000057714736763051015205 0ustar fabiofabio/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ #ifndef __XAPP_UTIL_H__ #define __XAPP_UTIL_H__ G_BEGIN_DECLS gboolean xapp_util_gpu_offload_supported (void); gboolean xapp_util_get_session_is_running (void); gchar *xapp_pango_font_string_to_css (const char *pango_font_string); const gchar *xapp_get_tmp_dir (void); G_END_DECLS #endif /* __XAPP_UTIL_H__ */ xapp-2.8.8/libxapp/xapp-util.c0000664000175000017500000001771214736763051015177 0ustar fabiofabio #include "config.h" #include #include #include #include "xapp-util.h" #define PRIME_SUPPORTED_TEST_FILE "/var/lib/ubuntu-drivers-common/requires_offloading" #define PRIME_MODE_FILE "/etc/prime-discrete" /** * xapp_util_gpu_offload_supported: * * Performs a check to see if on-demand mode for discrete graphics * is supported. * * Returns: %TRUE if supported. * * Since: 1.8 */ gboolean xapp_util_gpu_offload_supported (void) { g_autoptr(GFile) modefile = NULL; g_autofree gchar *contents = NULL; if (!g_file_test (PRIME_SUPPORTED_TEST_FILE, G_FILE_TEST_EXISTS)) { return FALSE; } modefile = g_file_new_for_path (PRIME_MODE_FILE); if (!g_file_load_contents (modefile, NULL, &contents, NULL, NULL, NULL)) { return FALSE; } return g_strstr_len (contents, -1, "on-demand") != NULL; } // Copied from cinnamon:main.c /** * xapp_util_get_session_is_running: * * Check if the Session Manager is currently in the "Running" phase. * * Returns: %TRUE if the session is running. * * Since: 2.0 */ gboolean xapp_util_get_session_is_running (void) { GDBusConnection *session_bus; GError *error; GVariant *session_result; gboolean session_running; error = NULL; session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (error != NULL) { g_critical ("Unable to determine if session is running, could not get session bus: %s\n", error->message); g_clear_error (&error); return FALSE; } session_result = g_dbus_connection_call_sync (session_bus, "org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", "IsSessionRunning", NULL, G_VARIANT_TYPE ("(b)"), G_DBUS_CALL_FLAGS_NONE, 1000, NULL, &error); if (session_result != NULL) { g_variant_get (session_result, "(b)", &session_running); g_variant_unref (session_result); } else { session_running = FALSE; g_clear_error (&error); } g_object_unref (session_bus); return session_running; } /** * xapp_pango_font_string_to_css: * @pango_font_string: a pango font description string * * Converts a pango font description string to a string suitable for use with the css "font" tag. The font description must contain the font family and font size or conversion will fail and %NULL will be returned * * Returns: (transfer full): the css compatible font string or %NULL if the conversion failed. * * Since: 2.2 */ gchar * xapp_pango_font_string_to_css (const char *pango_font_string) { PangoFontDescription *desc; GString *font_string; PangoFontMask set; desc = pango_font_description_from_string (pango_font_string); font_string = g_string_new (""); set = pango_font_description_get_set_fields (desc); if (!(set & PANGO_FONT_MASK_SIZE) || !(set & PANGO_FONT_MASK_FAMILY)) { return NULL; } if (set & PANGO_FONT_MASK_STYLE) { switch (pango_font_description_get_style (desc)) { case PANGO_STYLE_NORMAL: g_string_append (font_string, "normal "); break; case PANGO_STYLE_OBLIQUE: g_string_append (font_string, "oblique "); break; case PANGO_STYLE_ITALIC: g_string_append (font_string, "italic "); break; default: break; } } if (set & PANGO_FONT_MASK_VARIANT) { switch (pango_font_description_get_variant (desc)) { case PANGO_VARIANT_NORMAL: g_string_append (font_string, "normal "); break; case PANGO_VARIANT_SMALL_CAPS: g_string_append (font_string, "small-caps "); break; default: break; } } if (set & PANGO_FONT_MASK_WEIGHT) { switch (pango_font_description_get_weight (desc)) { case PANGO_WEIGHT_THIN: g_string_append (font_string, "100 "); break; case PANGO_WEIGHT_ULTRALIGHT: g_string_append (font_string, "200 "); break; case PANGO_WEIGHT_LIGHT: case PANGO_WEIGHT_SEMILIGHT: g_string_append (font_string, "300 "); break; case PANGO_WEIGHT_BOOK: case PANGO_WEIGHT_NORMAL: g_string_append (font_string, "400 "); break; case PANGO_WEIGHT_MEDIUM: g_string_append (font_string, "500 "); break; case PANGO_WEIGHT_SEMIBOLD: g_string_append (font_string, "600 "); break; case PANGO_WEIGHT_BOLD: g_string_append (font_string, "700 "); break; case PANGO_WEIGHT_ULTRABOLD: g_string_append (font_string, "800 "); break; case PANGO_WEIGHT_HEAVY: case PANGO_WEIGHT_ULTRAHEAVY: g_string_append (font_string, "900 "); break; default: break; } } if (set & PANGO_FONT_MASK_STRETCH) { switch (pango_font_description_get_stretch (desc)) { case PANGO_STRETCH_ULTRA_CONDENSED: g_string_append (font_string, "ultra-condensed "); break; case PANGO_STRETCH_EXTRA_CONDENSED: g_string_append (font_string, "extra-condensed "); break; case PANGO_STRETCH_CONDENSED: g_string_append (font_string, "condensed "); break; case PANGO_STRETCH_SEMI_CONDENSED: g_string_append (font_string, "semi-condensed "); break; case PANGO_STRETCH_NORMAL: g_string_append (font_string, "normal "); break; case PANGO_STRETCH_SEMI_EXPANDED: g_string_append (font_string, "semi-expanded "); break; case PANGO_STRETCH_EXPANDED: g_string_append (font_string, "expanded "); break; case PANGO_STRETCH_EXTRA_EXPANDED: break; case PANGO_STRETCH_ULTRA_EXPANDED: g_string_append (font_string, "ultra-expanded "); break; default: break; } } g_string_append_printf (font_string, "%dpx ", pango_font_description_get_size (desc) / PANGO_SCALE); g_string_append (font_string, pango_font_description_get_family (desc)); return g_string_free (font_string, FALSE); } /** * xapp_get_tmp_dir: * * Provides the path to the system's temporary files folder. This is identical to g_get_tmp_dir, * but includes the /dev/shm ramdisk as the first choice for a temporary folder. * * Returns: (type filename) (transfer none): the directory to use for temporary files. * Since: 2.2.16 */ const gchar * xapp_get_tmp_dir (void) { static const gchar *tmp_dir = NULL; if (tmp_dir == NULL) { if (access ("/dev/shm", W_OK) == 0) { tmp_dir = "/dev/shm"; } else { tmp_dir = g_get_tmp_dir (); } } return tmp_dir; } xapp-2.8.8/libxapp/xapp-preferences-window.h0000664000175000017500000000232114736763051020023 0ustar fabiofabio#ifndef _XAPP_PREFERENCES_WINDOW_H_ #define _XAPP_PREFERENCES_WINDOW_H_ #include #include G_BEGIN_DECLS #define XAPP_TYPE_PREFERENCES_WINDOW (xapp_preferences_window_get_type ()) G_DECLARE_DERIVABLE_TYPE (XAppPreferencesWindow, xapp_preferences_window, XAPP, PREFERENCES_WINDOW, GtkWindow) struct _XAppPreferencesWindowClass { GtkWindowClass parent_class; /* Keybinding signals */ void (* close) (XAppPreferencesWindow *window); }; XAppPreferencesWindow *xapp_preferences_window_new (void); void xapp_preferences_window_add_page (XAppPreferencesWindow *window, GtkWidget *widget, const gchar *name, const gchar *title); void xapp_preferences_window_add_button (XAppPreferencesWindow *window, GtkWidget *button, GtkPackType pack_type); G_END_DECLS #endif /* _XAPP_PREFERENCES_WINDOW_H_ */xapp-2.8.8/libxapp/xapp-status-icon.c0000664000175000017500000017502014736763051016470 0ustar fabiofabio #include #include #include #include #include #include #include #include #include "xapp-status-icon.h" #include "xapp-statusicon-interface.h" #include "xapp-enums.h" #define DEBUG_FLAG XAPP_DEBUG_STATUS_ICON #include "xapp-debug.h" #define FDO_DBUS_NAME "org.freedesktop.DBus" #define FDO_DBUS_PATH "/org/freedesktop/DBus" #define ICON_BASE_PATH "/org/x/StatusIcon" #define ICON_SUB_PATH (ICON_BASE_PATH "/Icon") #define ICON_NAME "org.x.StatusIcon" #define STATUS_ICON_MONITOR_MATCH "org.x.StatusIconMonitor" #define MAX_NAME_FAILS 3 #define MAX_SANE_ICON_SIZE 96 #define FALLBACK_ICON_SIZE 24 // This gets reffed and unreffed according to individual icon presence. // For the first icon, it gets created when exporting the icon's interface. // For each additional icon, it gets reffed again. On destruction, the // opposite occurs - unrefs, and the final unref calls a weak notify // function, which clears this pointer and unown's the process's bus name. static GDBusObjectManagerServer *obj_server = NULL; static guint name_owner_id = 0; XAppStatusIconState process_icon_state = XAPP_STATUS_ICON_STATE_NO_SUPPORT; enum { BUTTON_PRESS, BUTTON_RELEASE, ACTIVATE, STATE_CHANGED, SCROLL, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; enum { PROP_0, PROP_PRIMARY_MENU, PROP_SECONDARY_MENU, PROP_ICON_SIZE, PROP_NAME, N_PROPERTIES }; /** * SECTION:xapp-status-icon * @Short_description: Broadcasts status information over DBUS * @Title: XAppStatusIcon * * The XAppStatusIcon allows applications to share status info * about themselves. It replaces the obsolete and very similar * Gtk.StatusIcon widget. * * If used in an environment where no applet is handling XAppStatusIcons, * the XAppStatusIcon delegates its calls to a Gtk.StatusIcon. */ typedef struct { GDBusConnection *connection; XAppStatusIconInterface *interface_skeleton; XAppObjectSkeleton *object_skeleton; GCancellable *cancellable; GtkStatusIcon *gtk_status_icon; GtkWidget *primary_menu; GtkWidget *secondary_menu; gchar *name; gchar *icon_name; gchar *tooltip_text; gchar *label; gboolean visible; gint icon_size; gchar *metadata; guint listener_id; gint fail_counter; gboolean have_button_press; } XAppStatusIconPrivate; struct _XAppStatusIcon { GObject parent_instance; XAppStatusIconPrivate *priv; }; G_DEFINE_TYPE_WITH_PRIVATE (XAppStatusIcon, xapp_status_icon, G_TYPE_OBJECT) static void refresh_icon (XAppStatusIcon *self); static void use_gtk_status_icon (XAppStatusIcon *self); static void remove_icon_path_from_bus (XAppStatusIcon *self); static void cancellable_reset (XAppStatusIcon *self) { if (self->priv->cancellable) { g_cancellable_cancel (self->priv->cancellable); g_object_unref (self->priv->cancellable); } self->priv->cancellable = g_cancellable_new (); } static const gchar * panel_position_to_str (GtkPositionType type) { switch (type) { case GTK_POS_LEFT: return "Left"; case GTK_POS_RIGHT: return "Right"; case GTK_POS_TOP: return "Top"; case GTK_POS_BOTTOM: default: return "Bottom"; } } static const gchar * button_to_str (guint button) { switch (button) { case GDK_BUTTON_PRIMARY: return "Left"; case GDK_BUTTON_SECONDARY: return "Right"; case GDK_BUTTON_MIDDLE: return "Middle"; default: return "Unknown"; } } static const gchar * state_to_str (XAppStatusIconState state) { switch (state) { case XAPP_STATUS_ICON_STATE_NATIVE: return "Native"; case XAPP_STATUS_ICON_STATE_FALLBACK: return "Fallback"; case XAPP_STATUS_ICON_STATE_NO_SUPPORT: return "NoSupport"; default: return "Unknown"; } } static const gchar * direction_to_str (XAppScrollDirection direction) { switch (direction) { case XAPP_SCROLL_UP: return "Up"; case XAPP_SCROLL_DOWN: return "Down"; case XAPP_SCROLL_LEFT: return "Left"; case XAPP_SCROLL_RIGHT: return "Right"; default: return "Unknown"; } } static GdkEvent * synthesize_event (XAppStatusIcon *self, gint x, gint y, guint button, guint _time, gint position, GdkWindow **rect_window, GdkRectangle *win_rect, GdkGravity *rect_anchor, GdkGravity *menu_anchor) { GdkDisplay *display; GdkWindow *window; GdkSeat *seat; GdkWindowAttr attributes; gint attributes_mask; gint fx, fy; display = gdk_display_get_default (); seat = gdk_display_get_default_seat (display); switch (position) { case GTK_POS_TOP: fx = x; fy = y - self->priv->icon_size; *rect_anchor = GDK_GRAVITY_SOUTH_WEST; *menu_anchor = GDK_GRAVITY_NORTH_WEST; break; case GTK_POS_LEFT: fx = x - self->priv->icon_size; fy = y; *rect_anchor = GDK_GRAVITY_NORTH_EAST; *menu_anchor = GDK_GRAVITY_NORTH_WEST; break; case GTK_POS_RIGHT: fx = x; fy = y; *rect_anchor = GDK_GRAVITY_NORTH_WEST; *menu_anchor = GDK_GRAVITY_NORTH_EAST; break; case GTK_POS_BOTTOM: default: fx = x; fy = y; *rect_anchor = GDK_GRAVITY_NORTH_WEST; *menu_anchor = GDK_GRAVITY_SOUTH_WEST; break; } attributes.window_type = GDK_WINDOW_CHILD; win_rect->x = 0; win_rect->y = 0; win_rect->width = self->priv->icon_size; win_rect->height = self->priv->icon_size; attributes.x = fx; attributes.y = fy; attributes.width = self->priv->icon_size; attributes.height = self->priv->icon_size; attributes_mask = GDK_WA_X | GDK_WA_Y; window = gdk_window_new (NULL, &attributes, attributes_mask); *rect_window = window; GdkEvent *event = gdk_event_new (GDK_BUTTON_RELEASE); event->any.window = window; event->button.device = gdk_seat_get_pointer (seat); return event; } static void primary_menu_unmapped (GtkWidget *widget, gpointer user_data) { g_return_if_fail (XAPP_IS_STATUS_ICON (user_data)); XAppStatusIcon *icon = XAPP_STATUS_ICON (user_data); DEBUG ("Primary menu unmapped"); if (process_icon_state == XAPP_STATUS_ICON_STATE_NATIVE) { xapp_status_icon_interface_set_primary_menu_is_open (icon->priv->interface_skeleton, FALSE); } g_signal_handlers_disconnect_by_func (widget, primary_menu_unmapped, icon); } static void secondary_menu_unmapped (GtkWidget *widget, gpointer user_data) { g_return_if_fail (XAPP_IS_STATUS_ICON (user_data)); XAppStatusIcon *icon = XAPP_STATUS_ICON (user_data); DEBUG ("Secondary menu unmapped"); if (process_icon_state == XAPP_STATUS_ICON_STATE_NATIVE) { xapp_status_icon_interface_set_secondary_menu_is_open (icon->priv->interface_skeleton, FALSE); } g_signal_handlers_disconnect_by_func (widget, secondary_menu_unmapped, icon); } static void popup_menu (XAppStatusIcon *self, GtkMenu *menu, gint x, gint y, guint button, guint _time, gint panel_position) { GdkWindow *rect_window; GdkEvent *event; GdkRectangle win_rect; GdkGravity rect_anchor, menu_anchor; DEBUG ("Popup menu on behalf of application"); if (!gtk_widget_get_realized (GTK_WIDGET (menu))) { GtkWidget *toplevel; GtkStyleContext *context; gtk_widget_realize (GTK_WIDGET (menu)); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menu)); context = gtk_widget_get_style_context (toplevel); /* GtkMenu uses a GtkWindow as its toplevel that is explicitly set to * be client-decorated, and applies shadows outside the visible part of * the menu. They interfere with clicks on the icon while the menu is open, * as the invisible part takes the events instead (and this ends up doing * nothing). It makes the menu a littly ugly, so here's a new class name we * can use for themes to restore things bit if we want. Just avoid shadows. */ gtk_style_context_remove_class (context, "csd"); gtk_style_context_add_class (context, "xapp-status-icon-menu-window"); } if (button == GDK_BUTTON_PRIMARY) { if (process_icon_state == XAPP_STATUS_ICON_STATE_NATIVE) { xapp_status_icon_interface_set_primary_menu_is_open (self->priv->interface_skeleton, TRUE); } g_signal_connect (gtk_widget_get_toplevel (GTK_WIDGET (menu)), "unmap", G_CALLBACK (primary_menu_unmapped), self); } else if (button == GDK_BUTTON_SECONDARY) { if (process_icon_state == XAPP_STATUS_ICON_STATE_NATIVE) { xapp_status_icon_interface_set_secondary_menu_is_open (self->priv->interface_skeleton, TRUE); } g_signal_connect (gtk_widget_get_toplevel (GTK_WIDGET (menu)), "unmap", G_CALLBACK (secondary_menu_unmapped), self); } event = synthesize_event (self, x, y, button, _time, panel_position, &rect_window, &win_rect, &rect_anchor, &menu_anchor); g_object_set_data_full (G_OBJECT (menu), "rect_window", rect_window, (GDestroyNotify) gdk_window_destroy); g_object_set (G_OBJECT (menu), "anchor-hints", GDK_ANCHOR_SLIDE_X | GDK_ANCHOR_SLIDE_Y | GDK_ANCHOR_RESIZE_X | GDK_ANCHOR_RESIZE_Y, NULL); gtk_menu_popup_at_rect (menu, rect_window, &win_rect, rect_anchor, menu_anchor, event); gdk_event_free (event); } static gboolean should_send_activate (XAppStatusIcon *icon, guint button) { gboolean do_activate = TRUE; switch (button) { case GDK_BUTTON_PRIMARY: if (icon->priv->primary_menu) { do_activate = FALSE; } break; case GDK_BUTTON_SECONDARY: if (icon->priv->secondary_menu) { do_activate = FALSE; } break; default: break; } return do_activate; } static GtkWidget * get_menu_to_use (XAppStatusIcon *icon, guint button) { GtkWidget *menu_to_use = NULL; switch (button) { case GDK_BUTTON_PRIMARY: menu_to_use = icon->priv->primary_menu; break; case GDK_BUTTON_SECONDARY: menu_to_use = icon->priv->secondary_menu; break; } return menu_to_use; } static gboolean handle_click_method (XAppStatusIconInterface *skeleton, GDBusMethodInvocation *invocation, gint x, gint y, guint button, guint _time, gint panel_position, XAppStatusIcon *icon) { const gchar *name = g_dbus_method_invocation_get_method_name (invocation); if (g_strcmp0 (name, "ButtonPress") == 0) { DEBUG ("Received ButtonPress from monitor %s: " "pos:%d,%d , button: %s , time: %u , orientation: %s", g_dbus_method_invocation_get_sender (invocation), x, y, button_to_str (button), _time, panel_position_to_str (panel_position)); if (should_send_activate (icon, button)) { DEBUG ("Native sending 'activate' for %s button", button_to_str (button)); g_signal_emit (icon, signals[ACTIVATE], 0, button, _time); } icon->priv->have_button_press = TRUE; g_signal_emit (icon, signals[BUTTON_PRESS], 0, x, y, button, _time, panel_position); xapp_status_icon_interface_complete_button_press (skeleton, invocation); } else if (g_strcmp0 (name, "ButtonRelease") == 0) { DEBUG ("Received ButtonRelease from monitor %s: " "pos:%d,%d , button: %s , time: %u , orientation: %s", g_dbus_method_invocation_get_sender (invocation), x, y, button_to_str (button), _time, panel_position_to_str (panel_position)); if (icon->priv->have_button_press) { GtkWidget *menu_to_use = get_menu_to_use (icon, button); if (menu_to_use) { popup_menu (icon, GTK_MENU (menu_to_use), x, y, button, _time, panel_position); } g_signal_emit (icon, signals[BUTTON_RELEASE], 0, x, y, button, _time, panel_position); } icon->priv->have_button_press = FALSE; xapp_status_icon_interface_complete_button_release (skeleton, invocation); } return TRUE; } static gboolean handle_scroll_method (XAppStatusIconInterface *skeleton, GDBusMethodInvocation *invocation, gint delta, XAppScrollDirection direction, guint _time, XAppStatusIcon *icon) { DEBUG ("Received Scroll from monitor %s: " "delta: %d , direction: %s , time: %u", g_dbus_method_invocation_get_sender (invocation), delta, direction_to_str (direction), _time); g_signal_emit(icon, signals[SCROLL], 0, delta, direction, _time); xapp_status_icon_interface_complete_scroll (skeleton, invocation); return TRUE; } static void calculate_gtk_status_icon_position_and_orientation (XAppStatusIcon *icon, GtkStatusIcon *status_icon, gint *x, gint *y, gint *orientation) { GdkScreen *screen; GdkRectangle irect; GtkOrientation iorientation; gint final_x, final_y, final_o; final_x = 0; final_y = 0; final_o = 0; if (gtk_status_icon_get_geometry (status_icon, &screen, &irect, &iorientation)) { GdkDisplay *display = gdk_screen_get_display (screen); GdkMonitor *monitor; GdkRectangle mrect; monitor = gdk_display_get_monitor_at_point (display, irect.x + (irect.width / 2), irect.y + (irect.height / 2)); gdk_monitor_get_workarea (monitor, &mrect); switch (iorientation) { case GTK_ORIENTATION_HORIZONTAL: final_x = irect.x; if (irect.y + irect.height + 100 < mrect.y + mrect.height) { final_y = irect.y + irect.height; final_o = GTK_POS_TOP; } else { final_y = irect.y; final_o = GTK_POS_BOTTOM; } break; case GTK_ORIENTATION_VERTICAL: final_y = irect.y; if (irect.x + irect.width + 100 < mrect.x + mrect.width) { final_x = irect.x + irect.width; final_o = GTK_POS_LEFT; } else { final_x = irect.x; final_o = GTK_POS_RIGHT; } } } *x = final_x; *y = final_y; *orientation = final_o; } static gboolean on_gtk_status_icon_button_press (GtkStatusIcon *status_icon, GdkEvent *event, gpointer user_data) { XAppStatusIcon *icon = user_data; guint _time; guint button; gint x, y, orientation; button = event->button.button; _time = event->button.time; DEBUG ("GtkStatusIcon button-press-event with %s button", button_to_str (button)); /* We always send 'activate' for a button that has no corresponding menu, * and for middle clicks. */ if (should_send_activate (icon, button)) { DEBUG ("GtkStatusIcon activated by %s button", button_to_str (button)); g_signal_emit (icon, signals[ACTIVATE], 0, button, _time); } calculate_gtk_status_icon_position_and_orientation (icon, status_icon, &x, &y, &orientation); icon->priv->have_button_press = TRUE; g_signal_emit (icon, signals[BUTTON_PRESS], 0, x, y, button, _time, orientation); return GDK_EVENT_PROPAGATE; } static gboolean on_gtk_status_icon_button_release (GtkStatusIcon *status_icon, GdkEvent *event, gpointer user_data) { XAppStatusIcon *icon = user_data; GtkWidget *menu_to_use; guint _time; guint button; gint x, y, orientation; button = event->button.button; _time = event->button.time; DEBUG ("GtkStatusIcon button-release-event with %s button", button_to_str (button)); /* Native icons can have two menus, so we must determine which to use based * on the gtk icon event's button. */ menu_to_use = get_menu_to_use (icon, button); calculate_gtk_status_icon_position_and_orientation (icon, status_icon, &x, &y, &orientation); if (menu_to_use) { DEBUG ("GtkStatusIcon popup menu for %s button", button_to_str (button)); popup_menu (icon, GTK_MENU (menu_to_use), x, y, button, _time, orientation); } icon->priv->have_button_press = FALSE; g_signal_emit (icon, signals[BUTTON_RELEASE], 0, x, y, button, _time, orientation); return GDK_EVENT_PROPAGATE; } static gboolean on_gtk_status_icon_scroll (GtkStatusIcon *status_icon, GdkEvent *event, gpointer user_data) { XAppStatusIcon *icon = user_data; guint _time; _time = event->scroll.time; GdkScrollDirection direction; if (gdk_event_get_scroll_direction (event, &direction)) { XAppScrollDirection x_dir = XAPP_SCROLL_UP; gint delta = 0; if (direction != GDK_SCROLL_SMOOTH) { if (direction == GDK_SCROLL_UP) { x_dir = XAPP_SCROLL_UP; delta = -1; } else if (direction == GDK_SCROLL_DOWN) { x_dir = XAPP_SCROLL_DOWN; delta = 1; } else if (direction == GDK_SCROLL_LEFT) { x_dir = XAPP_SCROLL_LEFT; delta = -1; } else if (direction == GDK_SCROLL_RIGHT) { x_dir = XAPP_SCROLL_RIGHT; delta = 1; } } DEBUG ("Received Scroll from GtkStatusIcon %s: " "delta: %d , direction: %s , time: %u", gtk_status_icon_get_title (status_icon), delta, direction_to_str (direction), _time); g_signal_emit(icon, signals[SCROLL], 0, delta, x_dir, _time); } return GDK_EVENT_PROPAGATE; } static void name_owner_changed (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { XAppStatusIcon *self = XAPP_STATUS_ICON (user_data); DEBUG("NameOwnerChanged signal received, refreshing icon"); refresh_icon (self); } static void add_name_listener (XAppStatusIcon *self) { DEBUG ("Adding NameOwnerChanged listener for status monitors"); self->priv->listener_id = g_dbus_connection_signal_subscribe (self->priv->connection, FDO_DBUS_NAME, FDO_DBUS_NAME, "NameOwnerChanged", FDO_DBUS_PATH, STATUS_ICON_MONITOR_MATCH, G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_NAMESPACE, name_owner_changed, self, NULL); } static void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data) { g_warning ("XAppStatusIcon: lost or could not acquire presence on dbus. Refreshing."); GList *instances = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (obj_server)); GList *l; for (l = instances; l != NULL; l = l->next) { GObject *instance = G_OBJECT (l->data); XAppStatusIcon *icon = XAPP_STATUS_ICON (g_object_get_data (instance, "xapp-status-icon-instance")); if (icon == NULL) { g_warning ("on_name_lost: Could not retrieve xapp-status-icon-instance data: %s", name); continue; } icon->priv->fail_counter++; refresh_icon (icon); } g_list_free_full (instances, g_object_unref); } static void sync_skeleton (XAppStatusIcon *self) { XAppStatusIconPrivate *priv = self->priv; DEBUG ("Syncing icon properties (%s)", priv->name); priv->fail_counter = 0; g_clear_object (&self->priv->gtk_status_icon); g_object_set (G_OBJECT (priv->interface_skeleton), "name", priv->name, "label", priv->label, "icon-name", priv->icon_name, "tooltip-text", priv->tooltip_text, "visible", priv->visible, "metadata", priv->metadata, NULL); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (priv->interface_skeleton)); } static void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { process_icon_state = XAPP_STATUS_ICON_STATE_NATIVE; GList *instances = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (obj_server)); GList *l; for (l = instances; l != NULL; l = l->next) { GObject *instance = G_OBJECT (l->data); XAppStatusIcon *icon = XAPP_STATUS_ICON (g_object_get_data (instance, "xapp-status-icon-instance")); if (icon == NULL) { g_warning ("on_name_aquired: Could not retrieve xapp-status-icon-instance data: %s", name); continue; } sync_skeleton (icon); DEBUG ("Name acquired on dbus, state is now: %s", state_to_str (process_icon_state)); g_signal_emit (icon, signals[STATE_CHANGED], 0, process_icon_state); } g_list_free_full (instances, g_object_unref); } typedef struct { const gchar *signal_name; gpointer callback; } SkeletonSignal; static SkeletonSignal skeleton_signals[] = { // signal name callback { "handle-button-press", handle_click_method }, { "handle-button-release", handle_click_method }, { "handle-scroll", handle_scroll_method } }; static void obj_server_finalized (gpointer data, GObject *object) { DEBUG ("Final icon removed, clearing object manager (%s)", g_get_prgname ()); if (name_owner_id > 0) { g_bus_unown_name(name_owner_id); name_owner_id = 0; } obj_server = NULL; } static void ensure_object_manager (XAppStatusIcon *self) { if (obj_server == NULL) { DEBUG ("New object manager for (%s)", g_get_prgname ()); obj_server = g_dbus_object_manager_server_new (ICON_BASE_PATH); g_dbus_object_manager_server_set_connection (obj_server, self->priv->connection); g_object_weak_ref (G_OBJECT (obj_server),(GWeakNotify) obj_server_finalized, self); } else { g_object_ref (obj_server); } } static gboolean export_icon_interface (XAppStatusIcon *self) { gint i; ensure_object_manager (self); if (self->priv->interface_skeleton) { return TRUE; } self->priv->object_skeleton = xapp_object_skeleton_new (ICON_SUB_PATH); self->priv->interface_skeleton = xapp_status_icon_interface_skeleton_new (); xapp_object_skeleton_set_status_icon_interface (self->priv->object_skeleton, self->priv->interface_skeleton); g_object_set_data (G_OBJECT (self->priv->object_skeleton), "xapp-status-icon-instance", self); g_dbus_object_manager_server_export_uniquely (obj_server, G_DBUS_OBJECT_SKELETON (self->priv->object_skeleton)); g_object_unref (self->priv->object_skeleton); g_object_unref (self->priv->interface_skeleton); for (i = 0; i < G_N_ELEMENTS (skeleton_signals); i++) { SkeletonSignal sig = skeleton_signals[i]; g_signal_connect (self->priv->interface_skeleton, sig.signal_name, G_CALLBACK (sig.callback), self); } return TRUE; } static void connect_with_status_applet (XAppStatusIcon *self) { gchar **name_parts = NULL; gchar *owner_name; name_parts = g_strsplit (self->priv->name, ".", -1); if (g_dbus_is_name (self->priv->name) && g_str_has_prefix (self->priv->name, ICON_NAME) && g_strv_length (name_parts) == 4) { owner_name = g_strdup (self->priv->name); } else { gchar *valid_app_name = g_strdelimit (g_strdup (g_get_prgname ()), " .-,=+~`/", '_'); owner_name = g_strdup_printf ("%s.%s", ICON_NAME, valid_app_name); g_free (valid_app_name); } g_strfreev (name_parts); if (name_owner_id == 0) { DEBUG ("Attempting to own name on bus '%s'", owner_name); name_owner_id = g_bus_own_name_on_connection (self->priv->connection, owner_name, G_BUS_NAME_OWNER_FLAGS_DO_NOT_QUEUE, on_name_acquired, on_name_lost, NULL, NULL); } g_free(owner_name); } static void update_fallback_icon (XAppStatusIcon *self) { XAppStatusIconPrivate *priv = self->priv; if (!priv->gtk_status_icon) { return; } gtk_status_icon_set_tooltip_text (priv->gtk_status_icon, priv->tooltip_text); if (priv->icon_name) { gtk_status_icon_set_visible (priv->gtk_status_icon, priv->visible); if (g_path_is_absolute (priv->icon_name)) { gtk_status_icon_set_from_file (priv->gtk_status_icon, priv->icon_name); } else { gtk_status_icon_set_from_icon_name (priv->gtk_status_icon, priv->icon_name); } } else { gtk_status_icon_set_visible (priv->gtk_status_icon, FALSE); } } static void on_gtk_status_icon_embedded_changed (GtkStatusIcon *icon, GParamSpec *pspec, gpointer user_data) { g_return_if_fail (GTK_IS_STATUS_ICON (icon)); XAppStatusIcon *self = XAPP_STATUS_ICON (user_data); if (gtk_status_icon_is_embedded (icon)) { process_icon_state = XAPP_STATUS_ICON_STATE_FALLBACK; } else { process_icon_state = XAPP_STATUS_ICON_STATE_NO_SUPPORT; } DEBUG ("Fallback icon embedded_changed. State is now %s", state_to_str (process_icon_state)); g_signal_emit (self, signals[STATE_CHANGED], 0, process_icon_state); } static void use_gtk_status_icon (XAppStatusIcon *self) { XAppStatusIconPrivate *priv = self->priv; DEBUG ("Falling back to GtkStatusIcon"); remove_icon_path_from_bus (self); // Make sure there wasn't already one g_clear_object (&self->priv->gtk_status_icon); self->priv->gtk_status_icon = gtk_status_icon_new (); g_signal_connect (priv->gtk_status_icon, "button-press-event", G_CALLBACK (on_gtk_status_icon_button_press), self); g_signal_connect (priv->gtk_status_icon, "button-release-event", G_CALLBACK (on_gtk_status_icon_button_release), self); g_signal_connect (priv->gtk_status_icon, "scroll-event", G_CALLBACK (on_gtk_status_icon_scroll), self); g_signal_connect (priv->gtk_status_icon, "notify::embedded", G_CALLBACK (on_gtk_status_icon_embedded_changed), self); update_fallback_icon (self); } static void on_list_names_completed (GObject *source, GAsyncResult *res, gpointer user_data) { XAppStatusIcon *self = XAPP_STATUS_ICON(user_data); GVariant *result; GVariantIter *iter; gchar *str; GError *error; gboolean found; error = NULL; result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error); if (error != NULL) { if (error->code != G_IO_ERROR_CANCELLED) { g_critical ("XAppStatusIcon: attempt to ListNames failed: %s\n", error->message); use_gtk_status_icon (self); } else { DEBUG ("Attempt to ListNames cancelled"); } g_error_free (error); return; } g_variant_get (result, "(as)", &iter); found = FALSE; while (g_variant_iter_loop (iter, "s", &str)) { if (g_str_has_prefix (str, STATUS_ICON_MONITOR_MATCH)) { DEBUG ("Discovered active status monitor (%s)", str); found = TRUE; } } g_variant_iter_free (iter); g_variant_unref (result); if (found && export_icon_interface (self)) { if (name_owner_id > 0) { sync_skeleton (self); } else { connect_with_status_applet (self); return; } } else { use_gtk_status_icon (self); } } static void look_for_status_applet (XAppStatusIcon *self) { // Check that there is at least one applet on DBUS DEBUG("Looking for status monitors"); cancellable_reset (self); g_dbus_connection_call (self->priv->connection, FDO_DBUS_NAME, FDO_DBUS_PATH, FDO_DBUS_NAME, "ListNames", NULL, G_VARIANT_TYPE ("(as)"), G_DBUS_CALL_FLAGS_NONE, 3000, /* 3 secs */ self->priv->cancellable, on_list_names_completed, self); } static void complete_icon_setup (XAppStatusIcon *self) { if (self->priv->listener_id == 0) { add_name_listener (self); } /* There is a potential loop in the g_bus_own_name sequence - * if we fail to acquire a name, we refresh again and potentially * fail again. If we fail more than MAX_NAME_FAILS, then quit trying * and just use the fallback icon It's pretty unlikely for*/ if (self->priv->fail_counter == MAX_NAME_FAILS) { use_gtk_status_icon (self); return; } look_for_status_applet (self); } static void on_session_bus_connected (GObject *source, GAsyncResult *res, gpointer user_data) { XAppStatusIcon *self = XAPP_STATUS_ICON (user_data); GError *error; error = NULL; self->priv->connection = g_bus_get_finish (res, &error); if (error != NULL) { if (error->code != G_IO_ERROR_CANCELLED) { g_critical ("XAppStatusIcon: Unable to acquire session bus: %s", error->message); /* If we never get a connection, we use the Gtk icon exclusively, and will never * re-try. FIXME? this is unlikely to happen, so I don't see the point in trying * later, as there are probably bigger problems in this case. */ use_gtk_status_icon (self); } else { DEBUG ("Cancelled session bus acquire"); } g_error_free (error); return; } complete_icon_setup (self); } static void refresh_icon (XAppStatusIcon *self) { if (self->priv->connection == NULL) { DEBUG ("Connecting to session bus"); cancellable_reset (self); g_bus_get (G_BUS_TYPE_SESSION, self->priv->cancellable, on_session_bus_connected, self); } else { complete_icon_setup (self); } } static void xapp_status_icon_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { switch (prop_id) { case PROP_PRIMARY_MENU: xapp_status_icon_set_primary_menu (XAPP_STATUS_ICON (object), g_value_get_object (value)); break; case PROP_SECONDARY_MENU: xapp_status_icon_set_secondary_menu (XAPP_STATUS_ICON (object), g_value_get_object (value)); break; case PROP_ICON_SIZE: XAPP_STATUS_ICON (object)->priv->icon_size = CLAMP (g_value_get_int (value), 0, MAX_SANE_ICON_SIZE); break; case PROP_NAME: { const gchar *name = g_value_get_string (value); // Can't be null. We set to g_get_prgname() by default. if (name == NULL || name[0] == '\0') { break; } } xapp_status_icon_set_name (XAPP_STATUS_ICON (object), g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_status_icon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { XAppStatusIcon *icon = XAPP_STATUS_ICON (object); switch (prop_id) { case PROP_PRIMARY_MENU: g_value_set_object (value, icon->priv->primary_menu); break; case PROP_SECONDARY_MENU: g_value_set_object (value, icon->priv->secondary_menu); break; case PROP_ICON_SIZE: g_value_set_int (value, icon->priv->icon_size); break; case PROP_NAME: g_value_set_string (value, icon->priv->name); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void xapp_status_icon_init (XAppStatusIcon *self) { self->priv = xapp_status_icon_get_instance_private (self); self->priv->name = g_strdup (g_get_prgname()); self->priv->icon_size = FALLBACK_ICON_SIZE; self->priv->icon_name = g_strdup (" "); DEBUG ("Init: application name: '%s'", self->priv->name); // Default to visible (the same behavior as GtkStatusIcon) self->priv->visible = TRUE; refresh_icon (self); } static void remove_icon_path_from_bus (XAppStatusIcon *self) { g_return_if_fail (XAPP_IS_STATUS_ICON (self)); if (self->priv->object_skeleton) { const gchar *path; path = g_dbus_object_get_object_path (G_DBUS_OBJECT (self->priv->object_skeleton)); DEBUG ("Removing interface at path '%s'", path); g_object_set_data (G_OBJECT (self->priv->object_skeleton), "xapp-status-icon-instance", NULL); g_dbus_object_manager_server_unexport (obj_server, path); self->priv->interface_skeleton = NULL; self->priv->object_skeleton = NULL; g_object_unref (obj_server); } } static void xapp_status_icon_dispose (GObject *object) { XAppStatusIcon *self = XAPP_STATUS_ICON (object); DEBUG ("XAppStatusIcon dispose (%p)", object); g_free (self->priv->name); g_free (self->priv->icon_name); g_free (self->priv->tooltip_text); g_free (self->priv->label); g_free (self->priv->metadata); g_clear_object (&self->priv->cancellable); g_clear_object (&self->priv->primary_menu); g_clear_object (&self->priv->secondary_menu); if (self->priv->gtk_status_icon != NULL) { g_signal_handlers_disconnect_by_func (self->priv->gtk_status_icon, on_gtk_status_icon_button_press, self); g_signal_handlers_disconnect_by_func (self->priv->gtk_status_icon, on_gtk_status_icon_button_release, self); g_object_unref (self->priv->gtk_status_icon); self->priv->gtk_status_icon = NULL; } remove_icon_path_from_bus (self); if (self->priv->listener_id > 0) { g_dbus_connection_signal_unsubscribe (self->priv->connection, self->priv->listener_id); self->priv->listener_id = 0; } g_clear_object (&self->priv->connection); G_OBJECT_CLASS (xapp_status_icon_parent_class)->dispose (object); } static void xapp_status_icon_finalize (GObject *object) { DEBUG ("XAppStatusIcon finalize (%p)", object); g_clear_object (&XAPP_STATUS_ICON (object)->priv->cancellable); G_OBJECT_CLASS (xapp_status_icon_parent_class)->finalize (object); } static void xapp_status_icon_class_init (XAppStatusIconClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xapp_status_icon_dispose; gobject_class->finalize = xapp_status_icon_finalize; gobject_class->set_property = xapp_status_icon_set_property; gobject_class->get_property = xapp_status_icon_get_property; /** * XAppStatusIcon:primary-menu: * * A #GtkMenu to use when requested by the remote monitor via a left (or primary) click. * * When this property is not %NULL, the menu will be automatically positioned and * displayed during a primary button release. * * When this property IS %NULL, the #XAppStatusIcon::activate will be sent for primary * button presses. * * In both cases, the #XAppStatusIcon::button-press-event and #XAppStatusIcon::button-release-events * will be fired like normal. * * Setting this will remove any floating reference to the menu and assume ownership. * As a result, it is not necessary to maintain a reference to it in the parent * application (or unref it when finished with it - if you wish to replace the menu, * simply call this method again with a new menu. * * The same #GtkMenu widget can be set as both the primary and secondary. */ g_object_class_install_property (gobject_class, PROP_PRIMARY_MENU, g_param_spec_object ("primary-menu", "Status icon primary (left-click) menu", "A menu to bring up when the status icon is left-clicked", GTK_TYPE_WIDGET, G_PARAM_READWRITE)); /** * XAppStatusIcon:secondary-menu: * * A #GtkMenu to use when requested by the remote monitor via a right (or secondary) click. * * When this property is not %NULL, the menu will be automatically positioned and * displayed during a secondary button release. * * When this property IS %NULL, the #XAppStatusIcon::activate will be sent for secondary * button presses. * * In both cases, the #XAppStatusIcon::button-press-event and #XAppStatusIcon::button-release-events * will be fired like normal. * * Setting this will remove any floating reference to the menu and assume ownership. * As a result, it is not necessary to maintain a reference to it in the parent * application (or unref it when finished with it - if you wish to replace the menu, * simply call this method again with a new menu. * * The same #GtkMenu widget can be set as both the primary and secondary. */ g_object_class_install_property (gobject_class, PROP_SECONDARY_MENU, g_param_spec_object ("secondary-menu", "Status icon secondary (right-click) menu", "A menu to bring up when the status icon is right-clicked", GTK_TYPE_WIDGET, G_PARAM_READWRITE)); /** * XAppStatusIcon:icon-size: * * The icon size that is preferred by icon monitor/host - this is usually a product * of some calculation based on the panel size. It can be used by the client to size * an icon to be saved as a file and its path sent to the host. * * If this value is 0 it has not been set, and its value can be unreliable if the host * has multiple #XAppStatusIconMonitors active. */ g_object_class_install_property (gobject_class, PROP_ICON_SIZE, g_param_spec_int ("icon-size", "The icon size the monitor/host prefers", "The icon size that should be used, if the client is" " supplying absolute icon paths", 0, 96, 0, G_PARAM_READWRITE)); /** * XAppStatusIcon:name: * * The name of the icon for sorting purposes. If this is in the form of 'org.x.StatusIcon.foo` * and set immediately upon creation of the icon, it will also attempt to own this dbus name; * this can be useful in sandboxed environments where a well-defined name is required. If * additional icons are created, only the name given to the initial one will be used for dbus, * though different names can still affect the sort order. This is set to the value of * g_get_prgname() if no other name is provided. */ g_object_class_install_property (gobject_class, PROP_NAME, g_param_spec_string ("name", "The name of the icon for sorting purposes.", NULL, NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * XAppStatusIcon::button-press-event: * @icon: The #XAppStatusIcon * @x: The absolute x position to use for menu positioning * @y: The absolute y position to use for menu positioning * @button: The button that was pressed * @time: The time supplied by the event, or 0 * @panel_position: The #GtkPositionType to use for menu positioning * * Gets emitted when there is a button press received from an applet */ signals[BUTTON_PRESS] = g_signal_new ("button-press-event", XAPP_TYPE_STATUS_ICON, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 5, G_TYPE_INT, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT); /** * XAppStatusIcon::button-release-event: * @icon: The #XAppStatusIcon * @x: The absolute x position to use for menu positioning * @y: The absolute y position to use for menu positioning * @button: The button that was released * @time: The time supplied by the event, or 0 * @panel_position: The #GtkPositionType to use for menu positioning * * Gets emitted when there is a button release received from an applet */ signals[BUTTON_RELEASE] = g_signal_new ("button-release-event", XAPP_TYPE_STATUS_ICON, G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 5, G_TYPE_INT, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT); /** * XAppStatusIcon::activate: * @icon: The #XAppStatusIcon * @button: The button that was pressed * @time: The time supplied by the event, or 0 * * Gets emitted when the user activates the status icon. If the XAppStatusIcon:primary-menu or * XAppStatusIcon:secondary-menu is not %NULL, this signal is skipped for the respective button * presses. A middle button click will always send this signal when pressed. */ signals [ACTIVATE] = g_signal_new ("activate", XAPP_TYPE_STATUS_ICON, G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); /** * XAppStatusIcon::state-changed: * @icon: The #XAppStatusIcon * @new_state: The new #XAppStatusIconState of the icon * * Gets emitted when the state of the icon changes. If you wish * to react to changes in how the status icon is being handled * (perhaps to alter the menu or other click behavior), you should * connect to this - see #XAppStatusIconState for more details. */ signals [STATE_CHANGED] = g_signal_new ("state-changed", XAPP_TYPE_STATUS_ICON, G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, XAPP_TYPE_STATUS_ICON_STATE); /** * XAppStatusIcon::scroll-event: * @icon: The #XAppStatusIcon * @amount: The amount of movement for the scroll event * @direction: the #XAppScrollDirection of the scroll event * @time: The time supplied by the event, or 0 * * Gets emitted when the user uses the mouse scroll wheel over the status icon. * For the most part, amounts will always be 1, unless an applet supports smooth * scrolling. Generally the direction value is most important. */ signals [SCROLL] = g_signal_new ("scroll-event", XAPP_TYPE_STATUS_ICON, G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, NULL, G_TYPE_NONE, 3, G_TYPE_INT, XAPP_TYPE_SCROLL_DIRECTION, G_TYPE_UINT); } /** * xapp_status_icon_set_name: * @icon: a #XAppStatusIcon * @name: a name (this defaults to the name of the application, if not set) * * Sets the status icon name. This is not shown to users. * * Since: 1.6 */ void xapp_status_icon_set_name (XAppStatusIcon *icon, const gchar *name) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); if (g_strcmp0 (name, icon->priv->name) == 0) { return; } if (name == NULL || name[0] == '\0') { // name can't be null. We set to g_get_prgname() at startup, // and the set_property handler silently ignores nulls, but if this // is explicit, warn about it. g_warning ("Can't set icon the name to null or empty string"); return; } g_clear_pointer (&icon->priv->name, g_free); icon->priv->name = g_strdup (name); DEBUG ("set_name: %s", name); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_name (icon->priv->interface_skeleton, name); } /* Call this directly instead of in the update_fallback_icon() function, * as every time this is called, Gtk re-creates the plug for the icon, * so the tray thinks one icon has disappeared and a new one appeared, * which can cause flicker and undesirable re-ordering of tray items. */ if (icon->priv->gtk_status_icon != NULL) { gtk_status_icon_set_name (icon->priv->gtk_status_icon, name); } } /** * xapp_status_icon_set_icon_name: * @icon: a #XAppStatusIcon * @icon_name: An icon name or absolute path to an icon. * * Sets the icon name or local path to use. * * Since: 1.6 */ void xapp_status_icon_set_icon_name (XAppStatusIcon *icon, const gchar *icon_name) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); if (g_strcmp0 (icon_name, icon->priv->icon_name) == 0) { return; } g_clear_pointer (&icon->priv->icon_name, g_free); icon->priv->icon_name = g_strdup (icon_name); DEBUG ("set_icon_name: %s", icon_name); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_icon_name (icon->priv->interface_skeleton, icon_name); } update_fallback_icon (icon); } /** * xapp_status_icon_get_icon_size: * @icon: a #XAppStatusIcon * * Returns: The desired icon size - usually set by the host based on panel size. * This is not what it's guaranteed to get, and this is really only useful when * receiving absolute icon paths from the client app. * * Since: 1.8 */ gint xapp_status_icon_get_icon_size (XAppStatusIcon *icon) { g_return_val_if_fail (XAPP_IS_STATUS_ICON (icon), FALLBACK_ICON_SIZE); if (icon->priv->interface_skeleton == NULL) { DEBUG ("get_icon_size: %d (fallback)", FALLBACK_ICON_SIZE); return FALLBACK_ICON_SIZE; } gint size; size = xapp_status_icon_interface_get_icon_size (icon->priv->interface_skeleton); DEBUG ("get_icon_size: %d", size); return size; } /** * xapp_status_icon_set_tooltip_text: * @icon: a #XAppStatusIcon * @tooltip_text: the text to show in the tooltip * * Sets the tooltip text * * Since: 1.6 */ void xapp_status_icon_set_tooltip_text (XAppStatusIcon *icon, const gchar *tooltip_text) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); if (g_strcmp0 (tooltip_text, icon->priv->tooltip_text) == 0) { return; } g_clear_pointer (&icon->priv->tooltip_text, g_free); icon->priv->tooltip_text = g_strdup (tooltip_text); DEBUG ("set_tooltip_text: %s", tooltip_text); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_tooltip_text (icon->priv->interface_skeleton, tooltip_text); } update_fallback_icon (icon); } /** * xapp_status_icon_set_label: * @icon: a #XAppStatusIcon * @label: some text * * Sets a label, shown beside the icon * * Since: 1.6 */ void xapp_status_icon_set_label (XAppStatusIcon *icon, const gchar *label) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); if (g_strcmp0 (label, icon->priv->label) == 0) { return; } g_clear_pointer (&icon->priv->label, g_free); icon->priv->label = g_strdup (label); DEBUG ("set_label: '%s'", label); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_label (icon->priv->interface_skeleton, label); } } /** * xapp_status_icon_set_visible: * @icon: a #XAppStatusIcon * @visible: whether or not the status icon should be visible * * Sets the visibility of the status icon * * Since: 1.6 */ void xapp_status_icon_set_visible (XAppStatusIcon *icon, const gboolean visible) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); if (visible == icon->priv->visible) { return; } icon->priv->visible = visible; DEBUG ("set_visible: %s", visible ? "TRUE" : "FALSE"); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_visible (icon->priv->interface_skeleton, visible); } update_fallback_icon (icon); } /** * xapp_status_icon_get_visible: * @icon: an #XAppStatusIcon * * Returns whether or not the icon should currently be visible. * * Returns: the current visibility state. * Since: 1.8.5 */ gboolean xapp_status_icon_get_visible (XAppStatusIcon *icon) { g_return_val_if_fail (XAPP_IS_STATUS_ICON (icon), FALSE); DEBUG ("get_visible: %s", icon->priv->visible ? "TRUE" : "FALSE"); return icon->priv->visible; } /** * xapp_status_icon_popup_menu: * @icon: an #XAppStatusIcon * @menu: (nullable): A #GtkMenu to display when the primary mouse button is released. * @x: The x anchor position for the menu. * @y: The y anchor position for the menu. * @button: The button used to initiate this action (or 0) * @_time: The event time (or 0) * @panel_position: The #GtkPositionType for the position of the icon. * * Pop up @menu using the positioning arguments. These arguments should be * those provided by a #XAppStatusIcon::button-release-event. * * Since: 1.8.6 */ void xapp_status_icon_popup_menu (XAppStatusIcon *icon, GtkMenu *menu, gint x, gint y, guint button, guint _time, gint panel_position) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); g_return_if_fail (GTK_IS_MENU (menu) || menu == NULL); g_return_if_fail (process_icon_state != XAPP_STATUS_ICON_STATE_NO_SUPPORT); popup_menu (icon, menu, x, y, button, _time, panel_position); } /** * xapp_status_icon_set_primary_menu: * @icon: an #XAppStatusIcon * @menu: (nullable): A #GtkMenu to display when the primary mouse button is released. * * See the #XAppStatusIcon:primary-menu property for details * * Since: 1.6 */ void xapp_status_icon_set_primary_menu (XAppStatusIcon *icon, GtkMenu *menu) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); g_return_if_fail (GTK_IS_MENU (menu) || menu == NULL); if (menu == GTK_MENU (icon->priv->primary_menu)) { return; } g_clear_object (&icon->priv->primary_menu); DEBUG ("%s: %p", icon->priv->name, menu); if (menu) { icon->priv->primary_menu = GTK_WIDGET (g_object_ref_sink (menu)); } } /** * xapp_status_icon_get_primary_menu: * @icon: an #XAppStatusIcon * * Returns a pointer to a #GtkMenu that was set previously for the * primary mouse button. If no menu was set, this returns %NULL. * * Returns: (transfer none): the #GtkMenu or %NULL if none was set. * Since: 1.6 */ GtkWidget * xapp_status_icon_get_primary_menu (XAppStatusIcon *icon) { g_return_val_if_fail (XAPP_IS_STATUS_ICON (icon), NULL); DEBUG ("get_menu: %p", icon->priv->primary_menu); return icon->priv->primary_menu; } /** * xapp_status_icon_set_secondary_menu: * @icon: an #XAppStatusIcon * @menu: (nullable): A #GtkMenu to display when the primary mouse button is released. * * See the #XAppStatusIcon:secondary-menu property for details * * Since: 1.6 */ void xapp_status_icon_set_secondary_menu (XAppStatusIcon *icon, GtkMenu *menu) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); g_return_if_fail (GTK_IS_MENU (menu) || menu == NULL); if (menu == GTK_MENU (icon->priv->secondary_menu)) { return; } g_clear_object (&icon->priv->secondary_menu); DEBUG ("%s: %p", icon->priv->name, menu); if (menu) { icon->priv->secondary_menu = GTK_WIDGET (g_object_ref_sink (menu)); } } /** * xapp_status_icon_get_secondary_menu: * @icon: an #XAppStatusIcon * * Returns a pointer to a #GtkMenu that was set previously for the * secondary mouse button. If no menu was set, this returns %NULL. * * Returns: (transfer none): the #GtkMenu or %NULL if none was set. * Since: 1.6 */ GtkWidget * xapp_status_icon_get_secondary_menu (XAppStatusIcon *icon) { g_return_val_if_fail (XAPP_IS_STATUS_ICON (icon), NULL); DEBUG ("get_menu: %p", icon->priv->secondary_menu); return icon->priv->secondary_menu; } /** * xapp_status_icon_new: * * Creates a new #XAppStatusIcon instance * * Returns: (transfer full): a new #XAppStatusIcon. Use g_object_unref when finished. * * Since: 1.6 */ XAppStatusIcon * xapp_status_icon_new (void) { return g_object_new (XAPP_TYPE_STATUS_ICON, NULL); } /** * xapp_status_icon_new_with_name: * * Creates a new #XAppStatusIcon instance and sets its name to %name. * * Returns: (transfer full): a new #XAppStatusIcon. Use g_object_unref when finished. * * Since: 1.6 */ XAppStatusIcon * xapp_status_icon_new_with_name (const gchar *name) { return g_object_new (XAPP_TYPE_STATUS_ICON, "name", name, NULL); } /** * xapp_status_icon_get_state: * @icon: an #XAppStatusIcon * * Gets the current #XAppStatusIconState of icon. The state is determined by whether * the icon is being displayed by an #XAppStatusMonitor client, a fallback tray icon, * or not being displayed at all. * * See #XAppStatusIconState for more details. * * Returns: the icon's state. * * Since: 1.6 */ XAppStatusIconState xapp_status_icon_get_state (XAppStatusIcon *icon) { g_return_val_if_fail (XAPP_IS_STATUS_ICON (icon), XAPP_STATUS_ICON_STATE_NO_SUPPORT); DEBUG ("get_state: %s", state_to_str (process_icon_state)); return process_icon_state; } /** * xapp_status_icon_set_metadata: * @icon: an #XAppStatusIcon * @metadata: (nullable): A json-formatted string of key:values. * * Sets metadata to pass to the icon proxy for an applet's use. Right now this is only so * xapp-sn-watcher can tell the applets when the icon is originating from appindicator so panel * button 'highlighting' can behave correctly. * * Since: 1.8.7 */ void xapp_status_icon_set_metadata (XAppStatusIcon *icon, const gchar *metadata) { g_return_if_fail (XAPP_IS_STATUS_ICON (icon)); gchar *old_meta; DEBUG ("set_metadata: '%s'", metadata); if (g_strcmp0 (metadata, icon->priv->metadata) == 0) { return; } old_meta = icon->priv->metadata; icon->priv->metadata = g_strdup (metadata); g_free (old_meta); if (icon->priv->interface_skeleton) { xapp_status_icon_interface_set_metadata (icon->priv->interface_skeleton, metadata); } } /** * xapp_status_icon_any_monitors: * * Looks for the existence of any active #XAppStatusIconMonitors on the bus. * * Returns: %TRUE if at least one monitor was found. * * Since: 1.6 */ gboolean xapp_status_icon_any_monitors (void) { GDBusConnection *connection; GError *error; gboolean found; DEBUG("Looking for status monitors"); error = NULL; found = FALSE; connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (connection) { GVariant *result; result = g_dbus_connection_call_sync (connection, FDO_DBUS_NAME, FDO_DBUS_PATH, FDO_DBUS_NAME, "ListNames", NULL, G_VARIANT_TYPE ("(as)"), G_DBUS_CALL_FLAGS_NONE, /* 10 seconds */ 10 * 1000, NULL, &error); if (result) { GVariantIter *iter; gchar *str; g_variant_get (result, "(as)", &iter); found = FALSE; while (g_variant_iter_loop (iter, "s", &str)) { if (g_str_has_prefix (str, STATUS_ICON_MONITOR_MATCH)) { DEBUG ("Discovered active status monitor (%s)", str); found = TRUE; g_free (str); break; } } g_variant_iter_free (iter); g_variant_unref (result); } g_object_unref (connection); } if (error) { g_warning ("Unable to check for monitors: %s", error->message); g_error_free (error); } DEBUG ("Monitors found: %s", found ? "TRUE" : "FALSE"); return found; } xapp-2.8.8/libxapp/xapp-visibility-group.c0000664000175000017500000002241414736763051017536 0ustar fabiofabio#include #include "xapp-visibility-group.h" #define DEBUG_FLAG XAPP_DEBUG_VISIBILITY_GROUP #include "xapp-debug.h" XAppVisibilityGroup *xapp_visibility_group_copy (const XAppVisibilityGroup *group); void xapp_visibility_group_free (XAppVisibilityGroup *group); G_DEFINE_BOXED_TYPE (XAppVisibilityGroup, xapp_visibility_group, xapp_visibility_group_copy, xapp_visibility_group_free); /** * SECTION:xapp-visibility-group * @Short_description: Groups widgets to have their visibility or sensitivity controlled as a group, * independent of their positions in any widget hierarchy. * @Title: XAppVisibilityGroup * * You can use this to hide and show groups of widgets all at once, without having to * specify each one. They do not have to have the same parents, or even have the same toplevel * window. * * If a widget is destroyed before the group is, it will be automatically removed from the * visibility group. You only ever need to free the XAppVisibilityGroup itself. * * Only the specific members of the group have their visibility and sensitivity set, not their * descendants. No effort is made to track or prevent state changes made to individual widgets * by outside influence. */ XAppVisibilityGroup * xapp_visibility_group_copy (const XAppVisibilityGroup *group) { DEBUG ("XAppVisibilityGroup copy"); g_return_val_if_fail (group != NULL, NULL); XAppVisibilityGroup *_group = g_memdup2 (group, sizeof (XAppVisibilityGroup)); _group->widgets = NULL; _group->visible = group->visible; _group->sensitive = group->sensitive; return _group; } static void widget_disposed (XAppVisibilityGroup *group, GObject *object) { DEBUG ("Widget destroyed callback: %p", object); group->widgets = g_slist_remove (group->widgets, (gpointer) object); } static void add_one_widget (XAppVisibilityGroup *group, GtkWidget *widget) { if (g_slist_find (group->widgets, (gpointer) widget) != NULL) { return; } DEBUG ("Add one widget: %p", widget); group->widgets = g_slist_prepend (group->widgets, (gpointer) widget); g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) widget_disposed, group); g_object_set (widget, "visible", group->visible, "sensitive", group->sensitive, NULL); } static void add_widgets (XAppVisibilityGroup *group, GSList *widgets) { if (widgets != NULL) { GSList *l; for (l = widgets; l != NULL; l = l->next) { add_one_widget (group, GTK_WIDGET (l->data)); } } } static gboolean remove_one_widget (XAppVisibilityGroup *group, GtkWidget *widget) { GSList *ptr = g_slist_find (group->widgets, (gpointer) widget); DEBUG ("Remove one widget: %p", widget); g_object_weak_unref (G_OBJECT (widget), (GWeakNotify) widget_disposed, group); group->widgets = g_slist_remove (group->widgets, ptr->data); return TRUE; } static void remove_widgets (XAppVisibilityGroup *group) { GSList *l; for (l = group->widgets; l != NULL; l = l->next) { remove_one_widget (group, GTK_WIDGET (l->data)); } g_clear_pointer (&group->widgets, g_slist_free); } /** * xapp_visibility_group_free: * @group: The #XAppVisibilityGroup to free. * * Destroys the #XAppVisibilityGroup. * * Since 2.2.15 */ void xapp_visibility_group_free (XAppVisibilityGroup *group) { DEBUG ("XAppVisibilityGroup free"); g_return_if_fail (group != NULL); remove_widgets (group); g_free (group); } /** * xapp_visibility_group_new: * @visible: starting visibility state * @sensitive: starting sensitivity state * @widgets: (element-type GtkWidget) (transfer none) (nullable): list of #GtkWidgets to add to the group. * * Creates a new #XAppVisibilityGroup. * * If @widgets is not NULL, adds these widgets to the group with the starting visibility and * sensitivity state. * * Returns: (transfer full): a new #XAppVisibilityGroup. Use xapp_visibility_group_free when finished. * * Since: 2.2.15 */ XAppVisibilityGroup * xapp_visibility_group_new (gboolean visible, gboolean sensitive, GSList *widgets) { XAppVisibilityGroup *group; group = g_new0 (XAppVisibilityGroup, 1); group->visible = visible; group->sensitive = sensitive; add_widgets (group, widgets); return group; } static void group_show_element (gpointer data, gpointer user_data) { gtk_widget_show (GTK_WIDGET (data)); } /** * xapp_visibility_group_show: * @group: the visibility group * * Show all widgets in the group. * * Since: 2.2.15 */ void xapp_visibility_group_show (XAppVisibilityGroup *group) { g_return_if_fail (group != NULL && group->widgets != NULL); g_slist_foreach (group->widgets, (GFunc) group_show_element, group); group->visible = TRUE; } static void group_hide_element (gpointer data, gpointer user_data) { gtk_widget_hide (GTK_WIDGET (data)); } /** * xapp_visibility_group_hide: * @group: the visibility group * * Hide all widgets in the group. * * Since: 2.2.15 */ void xapp_visibility_group_hide (XAppVisibilityGroup *group) { g_return_if_fail (group != NULL && group->widgets != NULL); g_slist_foreach (group->widgets, (GFunc) group_hide_element, group); group->visible = FALSE; } /** * xapp_visibility_group_set_visible: * @group: the visibility group * @visible: TRUE to make the widgets visible. * * Set the visibility of all widgets in the group. * * Since: 2.2.15 */ void xapp_visibility_group_set_visible (XAppVisibilityGroup *group, gboolean visible) { g_return_if_fail (group != NULL && group->widgets != NULL); if (visible) { xapp_visibility_group_show (group); } else { xapp_visibility_group_hide (group); } } /** * xapp_visibility_group_get_visible: * @group: the visibility group. * * Get the visibility of the group. * * There is no guarantee that all widgets in the group actually are * in the returned state, if they've had their visibility individually * modified since the last time the group was set. * * Returns: The visibility state of the group. * Since: 2.2.15 */ gboolean xapp_visibility_group_get_visible (XAppVisibilityGroup *group) { g_return_val_if_fail (group != NULL, FALSE); return group->visible; } /** * xapp_visibility_group_set_sensitive: * @group: the visibility group. * @sensitive: TRUE to make the widgets sensitive. * * Set the sensitivity of all widgets in group. * * Since: 2.2.15 */ void xapp_visibility_group_set_sensitive (XAppVisibilityGroup *group, gboolean sensitive) { g_return_if_fail (group != NULL && group->widgets != NULL); GSList *l; for (l = group->widgets; l != NULL; l = l->next) { gtk_widget_set_sensitive (GTK_WIDGET (l->data), sensitive); } } /** * xapp_visibility_group_get_sensitive: * @group: the visibility group. * * Get the sensitivity of the group. * * There is no guarantee that all widgets in the group actually are * in the returned state, if they've had their sensitivity individually * modified since the last time the group was set. * * Returns: The sensitivity state of the group. * Since: 2.2.15 */ gboolean xapp_visibility_group_get_sensitive (XAppVisibilityGroup *group) { g_return_val_if_fail (group != NULL, FALSE); return group->sensitive; } /** * xapp_visibility_group_add_widget: * @group: the visibility group * @widget: the #GtkWidget to add to the group * * Adds widget to the visibility group. * * Since: 2.2.15 */ void xapp_visibility_group_add_widget (XAppVisibilityGroup *group, GtkWidget *widget) { g_return_if_fail (group != NULL); add_one_widget (group, widget); } /** * xapp_visibility_group_remove_widget: * @group: the visibility group * @widget: the #GtkWidget to remove from the group * * Returns: TRUE if the widget was found and removed. * * Since: 2.2.15 */ gboolean xapp_visibility_group_remove_widget (XAppVisibilityGroup *group, GtkWidget *widget) { g_return_val_if_fail (group != NULL && group->widgets != NULL, FALSE); return remove_one_widget (group, widget); } /** * xapp_visibility_group_get_widgets: * @group: the visibility group * Returns the members of the group or NULL if the group is empty. * * Returns: (element-type GtkWidget) (transfer none): a list of members of the group. * * The list is owned by XApp, do not free. * * Since: 2.2.15 */ GSList * xapp_visibility_group_get_widgets (XAppVisibilityGroup *group) { g_return_val_if_fail (group != NULL, NULL); return group->widgets; } /** * xapp_visibility_group_set_widgets: * @group: the visibility group * @widgets: (nullable) (element-type GtkWidget) (transfer none): The widgets to add to this group, replacing any existing ones. * * Since: 2.2.15 */ void xapp_visibility_group_set_widgets (XAppVisibilityGroup *group, GSList *widgets) { g_return_if_fail (group != NULL); remove_widgets (group); add_widgets (group, widgets); } xapp-2.8.8/libxapp/xapp-icon-chooser-dialog.h0000664000175000017500000000451514736763051020051 0ustar fabiofabio#ifndef _XAPP_ICON_CHOOSER_DIALOG_H_ #define _XAPP_ICON_CHOOSER_DIALOG_H_ #include #include #include "xapp-gtk-window.h" G_BEGIN_DECLS #define XAPP_TYPE_ICON_CHOOSER_DIALOG (xapp_icon_chooser_dialog_get_type ()) G_DECLARE_FINAL_TYPE (XAppIconChooserDialog, xapp_icon_chooser_dialog, XAPP, ICON_CHOOSER_DIALOG, XAppGtkWindow) typedef enum { XAPP_ICON_SIZE_16 = 16, XAPP_ICON_SIZE_22 = 22, XAPP_ICON_SIZE_24 = 24, XAPP_ICON_SIZE_32 = 32, XAPP_ICON_SIZE_48 = 48, XAPP_ICON_SIZE_96 = 96 } XAppIconSize; XAppIconChooserDialog * xapp_icon_chooser_dialog_new (void); gint xapp_icon_chooser_dialog_run (XAppIconChooserDialog *dialog); gint xapp_icon_chooser_dialog_run_with_icon (XAppIconChooserDialog *dialog, gchar *icon); gint xapp_icon_chooser_dialog_run_with_category (XAppIconChooserDialog *dialog, gchar *category); gchar * xapp_icon_chooser_dialog_get_icon_string (XAppIconChooserDialog *dialog); void xapp_icon_chooser_dialog_add_button (XAppIconChooserDialog *dialog, GtkWidget *button, GtkPackType packing, GtkResponseType response_id); gchar * xapp_icon_chooser_dialog_get_default_icon (XAppIconChooserDialog *dialog); void xapp_icon_chooser_dialog_set_default_icon (XAppIconChooserDialog *dialog, const gchar *icon); void xapp_icon_chooser_dialog_add_custom_category (XAppIconChooserDialog *dialog, const gchar *name, GList *icons); G_END_DECLS #endif /* _XAPP_ICON_CHOOSER_DIALOG_H_ */ xapp-2.8.8/libxapp/XApp-1.0.metadata0000664000175000017500000000045614736763051015753 0ustar fabiofabioGtkWindow cheader_filename="libxapp/xapp-gtk-window.h" MonitorBlanker cheader_filename="libxapp/xapp-monitor-blanker.h" KbdLayoutController cheader_filename="libxapp/xapp-kbd-layout-controller.h" StatusIcon cheader_filename="libxapp/xapp-status-icon.h" XApp cheader_filename="libxapp/xapp-gtk-window.h"xapp-2.8.8/libxapp/xapp-monitor-blanker.c0000664000175000017500000001146514736763051017324 0ustar fabiofabio #include #include #include #include #include #include #include #include "xapp-monitor-blanker.h" /** * SECTION:xapp-monitor-blanker * @Short_description: Blank and unblank unused monitors * @Title: XAppMonitorBlanker * * The XAppMonitorBlanker widget that creates one or more * POPUP type GtkWindows that are used to blank unused * monitors in multiple monitor setups. */ struct _XAppMonitorBlanker { GObject parent_instance; int num_outputs; gboolean blanked; GtkWidget **windows; }; G_DEFINE_TYPE (XAppMonitorBlanker, xapp_monitor_blanker, G_TYPE_OBJECT); static void xapp_monitor_blanker_init (XAppMonitorBlanker *self) { self->num_outputs = 0; self->blanked = FALSE; self->windows = NULL; } static void xapp_monitor_blanker_finalize (GObject *object) { XAppMonitorBlanker *self = XAPP_MONITOR_BLANKER (object); if (self->windows != NULL) { xapp_monitor_blanker_unblank_monitors (XAPP_MONITOR_BLANKER (self)); g_free (self->windows); } G_OBJECT_CLASS (xapp_monitor_blanker_parent_class)->finalize (object); } static void xapp_monitor_blanker_class_init (XAppMonitorBlankerClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = xapp_monitor_blanker_finalize; } /** * xapp_monitor_blanker_new: * * Creates a new #XAppMonitorBlanker. * * Returns: a newly created #XAppMonitorBlanker */ XAppMonitorBlanker * xapp_monitor_blanker_new (void) { return g_object_new (XAPP_TYPE_MONITOR_BLANKER, NULL); } GtkWidget * create_blanking_window (GdkScreen *screen, int monitor) { GdkRectangle fullscreen; GtkWidget *window; GtkStyleContext *context; GtkCssProvider *provider; gdk_screen_get_monitor_geometry (screen, monitor, &fullscreen); window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE); gtk_window_resize (GTK_WINDOW (window), fullscreen.width, fullscreen.height); gtk_window_move (GTK_WINDOW (window), fullscreen.x, fullscreen.y); gtk_widget_set_visible (window, TRUE); context = gtk_widget_get_style_context (GTK_WIDGET (window)); gtk_style_context_add_class (context, "xapp-blanking-window"); provider = gtk_css_provider_new (); gtk_css_provider_load_from_data (provider, ".xapp-blanking-window { background-color: rgb(0, 0, 0); }", -1, NULL); gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); return window; } /** * xapp_monitor_blanker_blank_other_monitors: * @self: a #XAppMonitorBlanker * @window: a #GtkWindow * * Blanks monitors besides the one where the @window is. */ void xapp_monitor_blanker_blank_other_monitors (XAppMonitorBlanker *self, GtkWindow *window) { GdkScreen *screen; int active_monitor; int i; g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self)); if (self->windows != NULL) return; screen = gtk_window_get_screen (window); active_monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (GTK_WIDGET (window))); self->num_outputs = gdk_screen_get_n_monitors (screen); self->windows = g_new (GtkWidget *, self->num_outputs); for (i = 0; i < self->num_outputs; i++) { if (i != active_monitor) { self->windows[i] = create_blanking_window (screen, i); } else { // initialize at NULL so it gets properly skipped when windows get destroyed self->windows[i] = NULL; } } self->blanked = TRUE; } /** * xapp_monitor_blanker_unblank_monitors: * @self: a #XAppMonitorBlanker * * Unblanks monitors that were blanked by * xapp_monitor_blanker_blank_other_monitors(); */ void xapp_monitor_blanker_unblank_monitors (XAppMonitorBlanker *self) { int i; g_return_if_fail (XAPP_IS_MONITOR_BLANKER (self)); if (self->windows == NULL) return; for (i = 0; i < self->num_outputs; i++) { if (self->windows[i] != NULL) { gtk_widget_destroy (self->windows[i]); self->windows[i] = NULL; } } g_free (self->windows); self->windows = NULL; self->blanked = FALSE; } /** * xapp_monitor_blanker_are_monitors_blanked: * @self: a #XAppMonitorBlanker * * Returns whether monitors are currently blanked. * See xapp_monitor_blanker_blank_other_monitors(). * * Returns: %TRUE if monitors are blanked. */ gboolean xapp_monitor_blanker_are_monitors_blanked (XAppMonitorBlanker *self) { return self->blanked; } xapp-2.8.8/libxapp/xapp-style-manager.h0000664000175000017500000000242614736763051016773 0ustar fabiofabio#ifndef __XAPP_STYLE_MANAGER_H__ #define __XAPP_STYLE_MANAGER_H__ #include G_BEGIN_DECLS #define XAPP_TYPE_STYLE_MANAGER xapp_style_manager_get_type () G_DECLARE_FINAL_TYPE (XAppStyleManager, xapp_style_manager, XAPP, STYLE_MANAGER, GObject) XAppStyleManager *xapp_style_manager_new (void); GtkWidget *xapp_style_manager_get_widget (XAppStyleManager *style_manager); void xapp_style_manager_set_widget (XAppStyleManager *style_manager, GtkWidget *widget); void xapp_style_manager_set_style_property (XAppStyleManager *style_manager, const gchar *name, const gchar *value); void xapp_style_manager_remove_style_property (XAppStyleManager *style_manager, const gchar *name); void xapp_style_manager_set_from_pango_font_string (XAppStyleManager *style_manager, const gchar *desc_string); G_END_DECLS #endif /* __XAPP_STYLE_MANAGER_H__ */ xapp-2.8.8/libxapp/xapp-kbd-layout-controller.h0000664000175000017500000001112314736763051020451 0ustar fabiofabio#ifndef __XAPP_KBD_LAYOUT_CONTROLLER_H__ #define __XAPP_KBD_LAYOUT_CONTROLLER_H__ #include #include #include #include G_BEGIN_DECLS #define XAPP_TYPE_KBD_LAYOUT_CONTROLLER (xapp_kbd_layout_controller_get_type ()) #define XAPP_KBD_LAYOUT_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XAPP_TYPE_KBD_LAYOUT_CONTROLLER, XAppKbdLayoutController)) #define XAPP_KBD_LAYOUT_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XAPP_TYPE_KBD_LAYOUT_CONTROLLER, XAppKbdLayoutControllerClass)) #define XAPP_IS_KBD_LAYOUT_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XAPP_TYPE_KBD_LAYOUT_CONTROLLER)) #define XAPP_IS_KBD_LAYOUT_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XAPP_TYPE_KBD_LAYOUT_CONTROLLER)) #define XAPP_KBD_LAYOUT_CONTROLLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XAPP_TYPE_KBD_LAYOUT_CONTROLLER, XAppKbdLayoutControllerClass)) typedef struct _XAppKbdLayoutControllerPrivate XAppKbdLayoutControllerPrivate; typedef struct _XAppKbdLayoutController XAppKbdLayoutController; typedef struct _XAppKbdLayoutControllerClass XAppKbdLayoutControllerClass; struct _XAppKbdLayoutController { GObject parent_object; XAppKbdLayoutControllerPrivate *priv; }; struct _XAppKbdLayoutControllerClass { GObjectClass parent_class; }; GType xapp_kbd_layout_controller_get_type (void); XAppKbdLayoutController *xapp_kbd_layout_controller_new (void); gboolean xapp_kbd_layout_controller_get_enabled (XAppKbdLayoutController *controller); guint xapp_kbd_layout_controller_get_current_group (XAppKbdLayoutController *controller); void xapp_kbd_layout_controller_set_current_group (XAppKbdLayoutController *controller, guint group); void xapp_kbd_layout_controller_next_group (XAppKbdLayoutController *controller); void xapp_kbd_layout_controller_previous_group (XAppKbdLayoutController *controller); gchar *xapp_kbd_layout_controller_get_current_name (XAppKbdLayoutController *controller); gchar **xapp_kbd_layout_controller_get_all_names (XAppKbdLayoutController *controller); gchar *xapp_kbd_layout_controller_get_current_icon_name (XAppKbdLayoutController *controller); gchar *xapp_kbd_layout_controller_get_icon_name_for_group (XAppKbdLayoutController *controller, guint group); gint xapp_kbd_layout_controller_get_current_flag_id (XAppKbdLayoutController *controller); gint xapp_kbd_layout_controller_get_flag_id_for_group (XAppKbdLayoutController *controller, guint group); gchar *xapp_kbd_layout_controller_get_current_short_group_label (XAppKbdLayoutController *controller); gchar *xapp_kbd_layout_controller_get_short_group_label_for_group (XAppKbdLayoutController *controller, guint group); gchar *xapp_kbd_layout_controller_get_current_variant_label (XAppKbdLayoutController *controller); gchar *xapp_kbd_layout_controller_get_variant_label_for_group (XAppKbdLayoutController *controller, guint group); /* Class function */ void xapp_kbd_layout_controller_render_cairo_subscript (cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height, gint subscript); G_END_DECLS #endif /* __XAPP_KBD_LAYOUT_CONTROLLER_H__ */ xapp-2.8.8/libxapp/xapp-glade-catalog.xml0000664000175000017500000000153114736763051017254 0ustar fabiofabio xapp_glade_catalog_init xapp-2.8.8/docs/0000775000175000017500000000000014736763051012371 5ustar fabiofabioxapp-2.8.8/docs/reference/0000775000175000017500000000000014736763051014327 5ustar fabiofabioxapp-2.8.8/docs/reference/XAppFavorites.html0000664000175000017500000011412614736763051017755 0ustar fabiofabio XAppFavorites: XApp Reference Manual

XAppFavorites

XAppFavorites — Keeps track of favorite files.

Signals

Types and Values

Object Hierarchy

    GBoxed
    ╰── XAppFavoriteInfo
    GObject
    ╰── XAppFavorites

Description

The XAppFavorites class allows applications display frequently-used files and provide a safe mechanism for launching them.

A list of XAppFavoriteInfos can be retrieved in full, or only for specific mimetypes.

A favorites uri scheme is also available if the xapp gtk3 module is loaded and this also makes the uri available as a shortcut in file dialogs.

XAppFavorites are new for 2.0

Functions

xapp_favorites_get_default ()

XAppFavorites *
xapp_favorites_get_default (void);

Returns the XAppFavorites instance.

Returns

the XAppFavorites instance for the process. Do not free.

[transfer none]

Since: 2.0


xapp_favorites_get_favorites ()

GList *
xapp_favorites_get_favorites (XAppFavorites *favorites,
                              const gchar * const *mimetypes);

Gets a list of all favorites. If mimetype is not NULL, the list will contain only favorites with that mimetype.

Parameters

favorites

The XAppFavorites

 

mimetypes

The mimetypes to filter by for results.

[nullable][array zero-terminated=1]

Returns

a list of XAppFavoriteInfos. Free the list with g_list_free, free elements with xapp_favorite_info_free.

[element-type XAppFavoriteInfo][transfer full]

Since: 2.0


xapp_favorites_get_n_favorites ()

gint
xapp_favorites_get_n_favorites (XAppFavorites *favorites);

Parameters

favorites

The XAppFavorites

 

Returns

The number of favorite files

Since: 2.0


xapp_favorites_find_by_display_name ()

XAppFavoriteInfo *
xapp_favorites_find_by_display_name (XAppFavorites *favorites,
                                     const gchar *display_name);

Looks for an XAppFavoriteInfo that corresponds to display_name .

Parameters

favorites

The XAppFavorites

 

display_name

The display name to lookup info for.

[not nullable]

Returns

an XAppFavoriteInfo or NULL if one was not found. This is owned by the favorites manager and should not be freed.

[transfer none]

Since: 2.0


xapp_favorites_find_by_uri ()

XAppFavoriteInfo *
xapp_favorites_find_by_uri (XAppFavorites *favorites,
                            const gchar *uri);

Looks for an XAppFavoriteInfo that corresponds to uri .

Parameters

favorites

The XAppFavorites

 

uri

The uri to lookup info for.

[not nullable]

Returns

an XAppFavoriteInfo or NULL if one was not found. This is owned by the favorites manager and should not be freed.

[transfer none]

Since: 2.0


xapp_favorites_add ()

void
xapp_favorites_add (XAppFavorites *favorites,
                    const gchar *uri);

Adds a new favorite. If the uri already exists, this does nothing.

Parameters

favorites

The XAppFavorites

 

uri

The uri the favorite is for

 

Since: 2.0


xapp_favorites_remove ()

void
xapp_favorites_remove (XAppFavorites *favorites,
                       const gchar *uri);

Removes a favorite from the list.

Parameters

favorites

The XAppFavorites

 

uri

The uri for the favorite being removed

 

Since: 2.0


xapp_favorites_launch ()

void
xapp_favorites_launch (XAppFavorites *favorites,
                       const gchar *uri,
                       guint32 timestamp);

Opens a favorite in its default app.

Parameters

favorites

The XAppFavorites

 

uri

The uri for the favorite to launch

 

timestamp

The timestamp from an event or 0

 

Since: 2.0


xapp_favorites_rename ()

void
xapp_favorites_rename (XAppFavorites *favorites,
                       const gchar *old_uri,
                       const gchar *new_uri);

Removes old_uri and adds new_uri. This is mainly for file managers to use as a convenience instead of add/remove, and guarantees the result, without having to worry about multiple dbus calls (gsettings).

Parameters

old_uri

the old favorite's uri.

 

new_uri

The new uri.

 

Since: 2.0


xapp_favorite_info_copy ()

XAppFavoriteInfo *
xapp_favorite_info_copy (const XAppFavoriteInfo *info);

Makes an exact copy of an existing XAppFavoriteInfo.

Parameters

info

The XAppFavoriteInfo to duplicate.

 

Returns

a new XAppFavoriteInfo. Free using xapp_favorite_info_free.

Since 2.0.

[transfer full]


xapp_favorite_info_free ()

void
xapp_favorite_info_free (XAppFavoriteInfo *info);

Destroys the XAppFavoriteInfo.

Since 2.0

Parameters

info

The XAppFavoriteInfo to free.

 

XAppFavoritesItemSelectedCallback ()

void
(*XAppFavoritesItemSelectedCallback) (XAppFavorites *favorites,
                                      const gchar *uri,
                                      gpointer user_data);

xapp_favorites_create_menu ()

GtkWidget *
xapp_favorites_create_menu (XAppFavorites *favorites,
                            const gchar **mimetypes,
                            XAppFavoritesItemSelectedCallback callback,
                            gpointer user_data,
                            GDestroyNotify func);

Generates a GtkMenu widget populated with favorites. The callback will be called when a menu item has been activated, and will include the uri of the respective item.

Parameters

favorites

The XAppFavorites instance.

 

mimetypes

The mimetypes to filter for, or NULL to include all favorites.

[nullable]

callback

(closure user_data): The callback to use when a menu item has been selected.

[scope notified]

user_data

The data to pass to the callback.

[closure]

func

Destroy function for user_data

 

Returns

a new GtkMenu populated with a list of favorites, or NULL if there are no favorites.

[transfer full]

Since: 2.0


xapp_favorites_create_actions ()

GList *
xapp_favorites_create_actions (XAppFavorites *favorites,
                               const gchar **mimetypes);

Generates a list of favorite GtkActions.

Parameters

favorites

The XAppFavorites instance.

 

mimetypes

The mimetypes to filter for, or NULL to include all favorites.

[nullable]

Returns

a new GtkActionGroup populated with a list of favorites, or NULL if there are no favorites.

[element-type Gtk.Action][transfer full]

Since: 2.0

Types and Values

XAPP_TYPE_FAVORITES

#define XAPP_TYPE_FAVORITES           (xapp_favorites_get_type ())

struct XAppFavoriteInfo

struct XAppFavoriteInfo {
    gchar *uri;
    gchar *display_name;
    gchar *cached_mimetype;
};

Information related to a single favorite file.

Members

gchar *uri;

The uri to the favorite file.

 

gchar *display_name;

The name for use when displaying the item. This may not exactly match the filename if there are files with the same name but in different folders.

 

gchar *cached_mimetype;

The mimetype calculated for the uri when it was added to favorites.

 

XAppFavorites

typedef struct _XAppFavorites XAppFavorites;

Signal Details

The “changed” signal

void
user_function (XAppFavorites *xappfavorites,
               gpointer       user_data)

Notifies when the favorites list has changed.

Parameters

user_data

user data set when the signal handler was connected.

 

Flags: Action

xapp-2.8.8/docs/reference/XAppGtkWindow.html0000664000175000017500000011067114736763051017731 0ustar fabiofabio XAppGtkWindow: XApp Reference Manual

XAppGtkWindow

XAppGtkWindow — A subclass of GtkWindow that allows additional communication with the window manager.

Types and Values

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ╰── GtkBin
                    ╰── GtkWindow
                        ╰── XAppGtkWindow
                            ╰── XAppIconChooserDialog

Implemented Interfaces

XAppGtkWindow implements AtkImplementorIface and GtkBuildable.

Description

This widget is a simple subclass of GtkWindow that provides the following additional capabilities:

  • Ability to set an icon name or icon file path for the window manager to make use of, rather than relying on a desktop file or fixed-size window- backed icon that Gtk normally generates. The window manager must support the NET_WM_XAPP_ICON_NAME hint.

  • Ability to send progress info to the window manager, in the form of an integer, 0-100, which can then be used to display this progress in some manner in a task manager or window list. The window manager must support the NET_WM_XAPP_PROGRESS hint.

  • Ability to signal a 'pulsing' progress state, of potentially indeterminate value, in the form of a boolean, which can be passed on to a window list. The window manager must support the NET_WM_XAPP_PROGRESS_PULSE hint

Wrappers:

Also provided are corresponding wrapper functions for normal GtkWindows. They are not class methods - they are called with the target widget as their first argument.

For example:

win = Gtk.Window() XApp.set_window_icon_name(win, "foobar")

These functions mirror those of the XAppGtkWindow class, but allow the properties to work with normal GtkWindows and descendants of GtkWindow.

Functions

xapp_gtk_window_new ()

GtkWidget *
xapp_gtk_window_new (GtkWindowType type);

Creates a new XAppGtkWindow of type type . See gtk_window_new() for more details.

Parameters

type

The GtkWindowType to use

 

Returns

A new XAppGtkWindow (transfer: full)


xapp_gtk_window_set_icon_name ()

void
xapp_gtk_window_set_icon_name (XAppGtkWindow *window,
                               const gchar *icon_name);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This also chains up and calls GtkWindow.set_icon_name for convenience and compatibility. Set to NULL to unset.

Parameters

window

The XAppGtkWindow to set the icon name for

 

icon_name

The icon name or path to set, or NULL to unset.

[nullable]

xapp_gtk_window_set_icon_from_file ()

void
xapp_gtk_window_set_icon_from_file (XAppGtkWindow *window,
                                    const gchar *file_name,
                                    GError **error);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This also chains up and calls GtkWindow.set_icon_from_file for convenience and compatibility. Set to NULL to unset.

Parameters

window

The XAppGtkWindow to set the icon name for

 

file_name

The icon path to set, or NULL to unset.

[nullable]

error

An error to set if something goes wrong.

[nullable]

xapp_gtk_window_set_progress ()

void
xapp_gtk_window_set_progress (XAppGtkWindow *window,
                              gint progress);

Sets the progress hint for a window manager (like muffin) to make available when applications want to display the application's progress in some operation. The value sent to the WM will be clamped to between 0 and 100.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists.

Setting progress will also cancel the 'pulsing' flag on the window as well, if it has been set.

Parameters

window

The XAppGtkWindow to set the progress for

 

progress

The value to set for progress.

 

xapp_gtk_window_set_progress_pulse ()

void
xapp_gtk_window_set_progress_pulse (XAppGtkWindow *window,
                                    gboolean pulse);

Sets the progress pulse hint hint for a window manager (like muffin) to make available when applications want to display indeterminate or ongoing progress in a task manager.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists. This will also remove the pulse state, if it is set.

Setting an explicit progress value will unset this flag.

Parameters

window

The XAppGtkWindow to set the progress for

 

pulse

Whether to have pulsing set or not.

 

xapp_set_window_icon_name ()

void
xapp_set_window_icon_name (GtkWindow *window,
                           const gchar *icon_name);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This is a function, not a method, for taking advantage of this feature with descendants of GtkWindows, such as GtkDialogs. Sets gtk_window_set_icon_name as well, to avoid needing to have two calls each time. Set to NULL to unset.

Parameters

window

The GtkWindow to set the icon name for

 

icon_name

The icon name to set, or NULL to unset.

[nullable]

xapp_set_window_icon_from_file ()

void
xapp_set_window_icon_from_file (GtkWindow *window,
                                const gchar *file_name,
                                GError **error);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This also chains up and calls GtkWindow.set_icon_from_file for convenience and compatibility. Set to NULL to unset.

Parameters

window

The GtkWindow to set the icon name for

 

file_name

The icon path to set, or NULL to unset.

[nullable]

error

An error to set if something goes wrong.

[nullable]

xapp_set_window_progress ()

void
xapp_set_window_progress (GtkWindow *window,
                          gint progress);

Sets the progress hint for a window manager (like muffin) to make available when applications want to display the application's progress in some operation. The value sent to the WM will be clamped to between 0 and 100.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists.

Setting progress will also cancel the 'pulsing' flag on the window as well, if it has been set.

Parameters

window

The GtkWindow to set the progress for

 

progress

The value to set for progress.

 

xapp_set_window_progress_pulse ()

void
xapp_set_window_progress_pulse (GtkWindow *window,
                                gboolean pulse);

Sets the progress pulse hint hint for a window manager (like muffin) to make available when applications want to display indeterminate or ongoing progress in a task manager.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists. This will also remove the pulse state, if it is set.

Setting an explicit progress value will unset this flag.

Parameters

window

The GtkWindow to set the progress for

 

pulse

Whether to have pulsing set or not.

 

xapp_set_xid_icon_name ()

void
xapp_set_xid_icon_name (gulong xid,
                        const gchar *icon_name);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This is a function, not a method, for applying the icon name property for a given (possibly foreign) window, by passing the window's XID. Set to NULL to unset.

Parameters

xid

The Window to set the icon name for

 

icon_name

The icon name to set, or NULL to unset.

[nullable]

xapp_set_xid_icon_from_file ()

void
xapp_set_xid_icon_from_file (gulong xid,
                             const gchar *file_name);

Sets the icon name hint for a window manager (like muffin) to make available when applications want to change their icons during runtime without having to resort to the internal low-res pixbufs that GdkWindow sets on the client side. This is a function, not a method, for applying the icon name property for a given (possibly foreign) window, by passing the window's XID. Set to NULL to unset.

Parameters

xid

The Window to set the icon name for

 

file_name

The icon path to set, or NULL to unset.

[nullable]

xapp_set_xid_progress ()

void
xapp_set_xid_progress (gulong xid,
                       gint progress);

Sets the progress hint for a window manager (like muffin) to make available when applications want to display the application's progress in some operation. The value sent to the WM will be clamped to between 0 and 100.

Setting progress will also cancel the 'pulsing' flag on the window as well, if it has been set.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists.

This is a function, not a method, for applying the progress property for a given (possibly foreign) window, by passing the window's XID.

Parameters

xid

The Window to set the progress for

 

progress

The value to set for progress.

 

xapp_set_xid_progress_pulse ()

void
xapp_set_xid_progress_pulse (gulong xid,
                             gboolean pulse);

Sets the progress pulse hint hint for a window manager (like muffin) to make available when applications want to display indeterminate or ongoing progress in a task manager.

Note: If a window will stick around after progress is complete, you will probably need to set progress to 0 to remove any progress effects on taskbars and window lists.

Setting an explicit progress value will unset this flag.

Parameters

xid

The Window to set the progress for

 

pulse

Whether to have pulsing set or not.

 

Types and Values

XAPP_TYPE_GTK_WINDOW

#define XAPP_TYPE_GTK_WINDOW (xapp_gtk_window_get_type ())

struct XAppGtkWindowClass

struct XAppGtkWindowClass {
  GtkWindowClass parent_class;

  gpointer padding[12];
};

XAppGtkWindow

typedef struct _XAppGtkWindow XAppGtkWindow;
xapp-2.8.8/docs/reference/XAppObjectManagerClient.html0000664000175000017500000066125314736763051021663 0ustar fabiofabio XAppObjectManagerClient: XApp Reference Manual

XAppObjectManagerClient

XAppObjectManagerClient

Functions

GDBusInterfaceInfo * xapp_status_icon_interface_interface_info ()
guint xapp_status_icon_interface_override_properties ()
void xapp_status_icon_interface_complete_button_press ()
void xapp_status_icon_interface_complete_button_release ()
void xapp_status_icon_interface_complete_scroll ()
void xapp_status_icon_interface_call_button_press ()
gboolean xapp_status_icon_interface_call_button_press_finish ()
gboolean xapp_status_icon_interface_call_button_press_sync ()
void xapp_status_icon_interface_call_button_release ()
gboolean xapp_status_icon_interface_call_button_release_finish ()
gboolean xapp_status_icon_interface_call_button_release_sync ()
void xapp_status_icon_interface_call_scroll ()
gboolean xapp_status_icon_interface_call_scroll_finish ()
gboolean xapp_status_icon_interface_call_scroll_sync ()
const gchar * xapp_status_icon_interface_get_name ()
gchar * xapp_status_icon_interface_dup_name ()
void xapp_status_icon_interface_set_name ()
const gchar * xapp_status_icon_interface_get_icon_name ()
gchar * xapp_status_icon_interface_dup_icon_name ()
void xapp_status_icon_interface_set_icon_name ()
const gchar * xapp_status_icon_interface_get_tooltip_text ()
gchar * xapp_status_icon_interface_dup_tooltip_text ()
void xapp_status_icon_interface_set_tooltip_text ()
const gchar * xapp_status_icon_interface_get_label ()
gchar * xapp_status_icon_interface_dup_label ()
void xapp_status_icon_interface_set_label ()
gboolean xapp_status_icon_interface_get_visible ()
void xapp_status_icon_interface_set_visible ()
gint xapp_status_icon_interface_get_icon_size ()
void xapp_status_icon_interface_set_icon_size ()
gboolean xapp_status_icon_interface_get_primary_menu_is_open ()
void xapp_status_icon_interface_set_primary_menu_is_open ()
gboolean xapp_status_icon_interface_get_secondary_menu_is_open ()
void xapp_status_icon_interface_set_secondary_menu_is_open ()
const gchar * xapp_status_icon_interface_get_metadata ()
gchar * xapp_status_icon_interface_dup_metadata ()
void xapp_status_icon_interface_set_metadata ()
void xapp_status_icon_interface_proxy_new ()
XAppStatusIconInterface * xapp_status_icon_interface_proxy_new_finish ()
XAppStatusIconInterface * xapp_status_icon_interface_proxy_new_sync ()
void xapp_status_icon_interface_proxy_new_for_bus ()
XAppStatusIconInterface * xapp_status_icon_interface_proxy_new_for_bus_finish ()
XAppStatusIconInterface * xapp_status_icon_interface_proxy_new_for_bus_sync ()
XAppStatusIconInterface * xapp_status_icon_interface_skeleton_new ()
XAppStatusIconInterface * xapp_object_get_status_icon_interface ()
XAppStatusIconInterface * xapp_object_peek_status_icon_interface ()
XAppObjectProxy * xapp_object_proxy_new ()
XAppObjectSkeleton * xapp_object_skeleton_new ()
void xapp_object_skeleton_set_status_icon_interface ()
GType xapp_object_manager_client_get_proxy_type ()
void xapp_object_manager_client_new ()
GDBusObjectManager * xapp_object_manager_client_new_finish ()
GDBusObjectManager * xapp_object_manager_client_new_sync ()
void xapp_object_manager_client_new_for_bus ()
GDBusObjectManager * xapp_object_manager_client_new_for_bus_finish ()
GDBusObjectManager * xapp_object_manager_client_new_for_bus_sync ()

Properties

XAppStatusIconInterface * status-icon-interface Read / Write
char * icon-name Read / Write
int icon-size Read / Write
char * label Read / Write
char * metadata Read / Write
char * name Read / Write
gboolean primary-menu-is-open Read / Write
gboolean secondary-menu-is-open Read / Write
char * tooltip-text Read / Write
gboolean visible Read / Write

Object Hierarchy

    GInterface
    ├── XAppObject
    ╰── XAppStatusIconInterface
    GObject
    ├── GDBusInterfaceSkeleton
       ╰── XAppStatusIconInterfaceSkeleton
    ├── GDBusObjectManagerClient
       ╰── XAppObjectManagerClient
    ├── GDBusObjectProxy
       ╰── XAppObjectProxy
    ├── GDBusObjectSkeleton
       ╰── XAppObjectSkeleton
    ╰── GDBusProxy
        ╰── XAppStatusIconInterfaceProxy

Description

Functions

xapp_status_icon_interface_interface_info ()

GDBusInterfaceInfo *
xapp_status_icon_interface_interface_info
                               (void);

Gets a machine-readable description of the org.x.StatusIcon D-Bus interface.

Returns

A GDBusInterfaceInfo. Do not free.

[transfer none]


xapp_status_icon_interface_override_properties ()

guint
xapp_status_icon_interface_override_properties
                               (GObjectClass *klass,
                                guint property_id_begin);

Overrides all GObject properties in the XAppStatusIconInterface interface for a concrete class. The properties are overridden in the order they are defined.

Parameters

klass

The class structure for a GObject derived class.

 

property_id_begin

The property id to assign to the first overridden property.

 

Returns

The last property id.


xapp_status_icon_interface_complete_button_press ()

void
xapp_status_icon_interface_complete_button_press
                               (XAppStatusIconInterface *object,
                                GDBusMethodInvocation *invocation);

Helper function used in service implementations to finish handling invocations of the ButtonPress() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.

This method will free invocation , you cannot use it afterwards.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

[transfer full]

xapp_status_icon_interface_complete_button_release ()

void
xapp_status_icon_interface_complete_button_release
                               (XAppStatusIconInterface *object,
                                GDBusMethodInvocation *invocation);

Helper function used in service implementations to finish handling invocations of the ButtonRelease() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.

This method will free invocation , you cannot use it afterwards.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

[transfer full]

xapp_status_icon_interface_complete_scroll ()

void
xapp_status_icon_interface_complete_scroll
                               (XAppStatusIconInterface *object,
                                GDBusMethodInvocation *invocation);

Helper function used in service implementations to finish handling invocations of the Scroll() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.

This method will free invocation , you cannot use it afterwards.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

[transfer full]

xapp_status_icon_interface_call_button_press ()

void
xapp_status_icon_interface_call_button_press
                               (XAppStatusIconInterface *proxy,
                                gint arg_x,
                                gint arg_y,
                                guint arg_button,
                                guint arg_time,
                                gint arg_panel_position,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Asynchronously invokes the ButtonPress() D-Bus method on proxy . When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_status_icon_interface_call_button_press_finish() to get the result of the operation.

See xapp_status_icon_interface_call_button_press_sync() for the synchronous, blocking version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_x

Argument to pass with the method invocation.

 

arg_y

Argument to pass with the method invocation.

 

arg_button

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

arg_panel_position

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied or NULL.

 

user_data

User data to pass to callback .

 

xapp_status_icon_interface_call_button_press_finish ()

gboolean
xapp_status_icon_interface_call_button_press_finish
                               (XAppStatusIconInterface *proxy,
                                GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_status_icon_interface_call_button_press().

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_status_icon_interface_call_button_press().

 

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_call_button_press_sync ()

gboolean
xapp_status_icon_interface_call_button_press_sync
                               (XAppStatusIconInterface *proxy,
                                gint arg_x,
                                gint arg_y,
                                guint arg_button,
                                guint arg_time,
                                gint arg_panel_position,
                                GCancellable *cancellable,
                                GError **error);

Synchronously invokes the ButtonPress() D-Bus method on proxy . The calling thread is blocked until a reply is received.

See xapp_status_icon_interface_call_button_press() for the asynchronous version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_x

Argument to pass with the method invocation.

 

arg_y

Argument to pass with the method invocation.

 

arg_button

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

arg_panel_position

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_call_button_release ()

void
xapp_status_icon_interface_call_button_release
                               (XAppStatusIconInterface *proxy,
                                gint arg_x,
                                gint arg_y,
                                guint arg_button,
                                guint arg_time,
                                gint arg_panel_position,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Asynchronously invokes the ButtonRelease() D-Bus method on proxy . When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_status_icon_interface_call_button_release_finish() to get the result of the operation.

See xapp_status_icon_interface_call_button_release_sync() for the synchronous, blocking version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_x

Argument to pass with the method invocation.

 

arg_y

Argument to pass with the method invocation.

 

arg_button

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

arg_panel_position

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied or NULL.

 

user_data

User data to pass to callback .

 

xapp_status_icon_interface_call_button_release_finish ()

gboolean
xapp_status_icon_interface_call_button_release_finish
                               (XAppStatusIconInterface *proxy,
                                GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_status_icon_interface_call_button_release().

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_status_icon_interface_call_button_release().

 

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_call_button_release_sync ()

gboolean
xapp_status_icon_interface_call_button_release_sync
                               (XAppStatusIconInterface *proxy,
                                gint arg_x,
                                gint arg_y,
                                guint arg_button,
                                guint arg_time,
                                gint arg_panel_position,
                                GCancellable *cancellable,
                                GError **error);

Synchronously invokes the ButtonRelease() D-Bus method on proxy . The calling thread is blocked until a reply is received.

See xapp_status_icon_interface_call_button_release() for the asynchronous version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_x

Argument to pass with the method invocation.

 

arg_y

Argument to pass with the method invocation.

 

arg_button

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

arg_panel_position

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_call_scroll ()

void
xapp_status_icon_interface_call_scroll
                               (XAppStatusIconInterface *proxy,
                                gint arg_delta,
                                gint arg_orientation,
                                guint arg_time,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Asynchronously invokes the Scroll() D-Bus method on proxy . When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_status_icon_interface_call_scroll_finish() to get the result of the operation.

See xapp_status_icon_interface_call_scroll_sync() for the synchronous, blocking version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_delta

Argument to pass with the method invocation.

 

arg_orientation

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied or NULL.

 

user_data

User data to pass to callback .

 

xapp_status_icon_interface_call_scroll_finish ()

gboolean
xapp_status_icon_interface_call_scroll_finish
                               (XAppStatusIconInterface *proxy,
                                GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_status_icon_interface_call_scroll().

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_status_icon_interface_call_scroll().

 

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_call_scroll_sync ()

gboolean
xapp_status_icon_interface_call_scroll_sync
                               (XAppStatusIconInterface *proxy,
                                gint arg_delta,
                                gint arg_orientation,
                                guint arg_time,
                                GCancellable *cancellable,
                                GError **error);

Synchronously invokes the Scroll() D-Bus method on proxy . The calling thread is blocked until a reply is received.

See xapp_status_icon_interface_call_scroll() for the asynchronous version of this method.

Parameters

proxy

A XAppStatusIconInterfaceProxy.

 

arg_delta

Argument to pass with the method invocation.

 

arg_orientation

Argument to pass with the method invocation.

 

arg_time

Argument to pass with the method invocation.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL.

 

Returns

TRUE if the call succeeded, FALSE if error is set.

[skip]


xapp_status_icon_interface_get_name ()

const gchar *
xapp_status_icon_interface_get_name (XAppStatusIconInterface *object);

Gets the value of the "Name" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where object was constructed. Use xapp_status_icon_interface_dup_name() if on another thread.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. Do not free the returned value, it belongs to object .

[transfer none][nullable]


xapp_status_icon_interface_dup_name ()

gchar *
xapp_status_icon_interface_dup_name (XAppStatusIconInterface *object);

Gets a copy of the "Name" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. The returned value should be freed with g_free().

[transfer full][nullable]


xapp_status_icon_interface_set_name ()

void
xapp_status_icon_interface_set_name (XAppStatusIconInterface *object,
                                     const gchar *value);

Sets the "Name" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_icon_name ()

const gchar *
xapp_status_icon_interface_get_icon_name
                               (XAppStatusIconInterface *object);

Gets the value of the "IconName" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where object was constructed. Use xapp_status_icon_interface_dup_icon_name() if on another thread.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. Do not free the returned value, it belongs to object .

[transfer none][nullable]


xapp_status_icon_interface_dup_icon_name ()

gchar *
xapp_status_icon_interface_dup_icon_name
                               (XAppStatusIconInterface *object);

Gets a copy of the "IconName" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. The returned value should be freed with g_free().

[transfer full][nullable]


xapp_status_icon_interface_set_icon_name ()

void
xapp_status_icon_interface_set_icon_name
                               (XAppStatusIconInterface *object,
                                const gchar *value);

Sets the "IconName" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_tooltip_text ()

const gchar *
xapp_status_icon_interface_get_tooltip_text
                               (XAppStatusIconInterface *object);

Gets the value of the "TooltipText" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where object was constructed. Use xapp_status_icon_interface_dup_tooltip_text() if on another thread.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. Do not free the returned value, it belongs to object .

[transfer none][nullable]


xapp_status_icon_interface_dup_tooltip_text ()

gchar *
xapp_status_icon_interface_dup_tooltip_text
                               (XAppStatusIconInterface *object);

Gets a copy of the "TooltipText" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. The returned value should be freed with g_free().

[transfer full][nullable]


xapp_status_icon_interface_set_tooltip_text ()

void
xapp_status_icon_interface_set_tooltip_text
                               (XAppStatusIconInterface *object,
                                const gchar *value);

Sets the "TooltipText" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_label ()

const gchar *
xapp_status_icon_interface_get_label (XAppStatusIconInterface *object);

Gets the value of the "Label" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where object was constructed. Use xapp_status_icon_interface_dup_label() if on another thread.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. Do not free the returned value, it belongs to object .

[transfer none][nullable]


xapp_status_icon_interface_dup_label ()

gchar *
xapp_status_icon_interface_dup_label (XAppStatusIconInterface *object);

Gets a copy of the "Label" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. The returned value should be freed with g_free().

[transfer full][nullable]


xapp_status_icon_interface_set_label ()

void
xapp_status_icon_interface_set_label (XAppStatusIconInterface *object,
                                      const gchar *value);

Sets the "Label" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_visible ()

gboolean
xapp_status_icon_interface_get_visible
                               (XAppStatusIconInterface *object);

Gets the value of the "Visible" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value.


xapp_status_icon_interface_set_visible ()

void
xapp_status_icon_interface_set_visible
                               (XAppStatusIconInterface *object,
                                gboolean value);

Sets the "Visible" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_icon_size ()

gint
xapp_status_icon_interface_get_icon_size
                               (XAppStatusIconInterface *object);

Gets the value of the "IconSize" D-Bus property.

Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value.


xapp_status_icon_interface_set_icon_size ()

void
xapp_status_icon_interface_set_icon_size
                               (XAppStatusIconInterface *object,
                                gint value);

Sets the "IconSize" D-Bus property to value .

Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_primary_menu_is_open ()

gboolean
xapp_status_icon_interface_get_primary_menu_is_open
                               (XAppStatusIconInterface *object);

Gets the value of the "PrimaryMenuIsOpen" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value.


xapp_status_icon_interface_set_primary_menu_is_open ()

void
xapp_status_icon_interface_set_primary_menu_is_open
                               (XAppStatusIconInterface *object,
                                gboolean value);

Sets the "PrimaryMenuIsOpen" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_secondary_menu_is_open ()

gboolean
xapp_status_icon_interface_get_secondary_menu_is_open
                               (XAppStatusIconInterface *object);

Gets the value of the "SecondaryMenuIsOpen" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value.


xapp_status_icon_interface_set_secondary_menu_is_open ()

void
xapp_status_icon_interface_set_secondary_menu_is_open
                               (XAppStatusIconInterface *object,
                                gboolean value);

Sets the "SecondaryMenuIsOpen" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_get_metadata ()

const gchar *
xapp_status_icon_interface_get_metadata
                               (XAppStatusIconInterface *object);

Gets the value of the "Metadata" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where object was constructed. Use xapp_status_icon_interface_dup_metadata() if on another thread.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. Do not free the returned value, it belongs to object .

[transfer none][nullable]


xapp_status_icon_interface_dup_metadata ()

gchar *
xapp_status_icon_interface_dup_metadata
                               (XAppStatusIconInterface *object);

Gets a copy of the "Metadata" D-Bus property.

Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.

[skip]

Parameters

Returns

The property value or NULL if the property is not set. The returned value should be freed with g_free().

[transfer full][nullable]


xapp_status_icon_interface_set_metadata ()

void
xapp_status_icon_interface_set_metadata
                               (XAppStatusIconInterface *object,
                                const gchar *value);

Sets the "Metadata" D-Bus property to value .

Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.

[skip]

Parameters

object

A XAppStatusIconInterface.

 

value

The value to set.

 

xapp_status_icon_interface_proxy_new ()

void
xapp_status_icon_interface_proxy_new (GDBusConnection *connection,
                                      GDBusProxyFlags flags,
                                      const gchar *name,
                                      const gchar *object_path,
                                      GCancellable *cancellable,
                                      GAsyncReadyCallback callback,
                                      gpointer user_data);

Asynchronously creates a proxy for the D-Bus interface org.x.StatusIcon. See g_dbus_proxy_new() for more details.

When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_status_icon_interface_proxy_new_finish() to get the result of the operation.

See xapp_status_icon_interface_proxy_new_sync() for the synchronous, blocking version of this constructor.

Parameters

connection

A GDBusConnection.

 

flags

Flags from the GDBusProxyFlags enumeration.

 

name

A bus name (well-known or unique) or NULL if connection is not a message bus connection.

[nullable]

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied.

 

user_data

User data to pass to callback .

 

xapp_status_icon_interface_proxy_new_finish ()

XAppStatusIconInterface *
xapp_status_icon_interface_proxy_new_finish
                               (GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_status_icon_interface_proxy_new().

Parameters

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_status_icon_interface_proxy_new().

 

error

Return location for error or NULL

 

Returns

The constructed proxy object or NULL if error is set.

[transfer full][type XAppStatusIconInterfaceProxy]


xapp_status_icon_interface_proxy_new_sync ()

XAppStatusIconInterface *
xapp_status_icon_interface_proxy_new_sync
                               (GDBusConnection *connection,
                                GDBusProxyFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GError **error);

Synchronously creates a proxy for the D-Bus interface org.x.StatusIcon. See g_dbus_proxy_new_sync() for more details.

The calling thread is blocked until a reply is received.

See xapp_status_icon_interface_proxy_new() for the asynchronous version of this constructor.

Parameters

connection

A GDBusConnection.

 

flags

Flags from the GDBusProxyFlags enumeration.

 

name

A bus name (well-known or unique) or NULL if connection is not a message bus connection.

[nullable]

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL

 

Returns

The constructed proxy object or NULL if error is set.

[transfer full][type XAppStatusIconInterfaceProxy]


xapp_status_icon_interface_proxy_new_for_bus ()

void
xapp_status_icon_interface_proxy_new_for_bus
                               (GBusType bus_type,
                                GDBusProxyFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Like xapp_status_icon_interface_proxy_new() but takes a GBusType instead of a GDBusConnection.

When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_status_icon_interface_proxy_new_for_bus_finish() to get the result of the operation.

See xapp_status_icon_interface_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.

Parameters

bus_type

A GBusType.

 

flags

Flags from the GDBusProxyFlags enumeration.

 

name

A bus name (well-known or unique).

 

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied.

 

user_data

User data to pass to callback .

 

xapp_status_icon_interface_proxy_new_for_bus_finish ()

XAppStatusIconInterface *
xapp_status_icon_interface_proxy_new_for_bus_finish
                               (GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_status_icon_interface_proxy_new_for_bus().

Parameters

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_status_icon_interface_proxy_new_for_bus().

 

error

Return location for error or NULL

 

Returns

The constructed proxy object or NULL if error is set.

[transfer full][type XAppStatusIconInterfaceProxy]


xapp_status_icon_interface_proxy_new_for_bus_sync ()

XAppStatusIconInterface *
xapp_status_icon_interface_proxy_new_for_bus_sync
                               (GBusType bus_type,
                                GDBusProxyFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GError **error);

Like xapp_status_icon_interface_proxy_new_sync() but takes a GBusType instead of a GDBusConnection.

The calling thread is blocked until a reply is received.

See xapp_status_icon_interface_proxy_new_for_bus() for the asynchronous version of this constructor.

Parameters

bus_type

A GBusType.

 

flags

Flags from the GDBusProxyFlags enumeration.

 

name

A bus name (well-known or unique).

 

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL

 

Returns

The constructed proxy object or NULL if error is set.

[transfer full][type XAppStatusIconInterfaceProxy]


xapp_status_icon_interface_skeleton_new ()

XAppStatusIconInterface *
xapp_status_icon_interface_skeleton_new
                               (void);

Creates a skeleton object for the D-Bus interface org.x.StatusIcon.

Returns

The skeleton object.

[transfer full][type XAppStatusIconInterfaceSkeleton]


xapp_object_get_status_icon_interface ()

XAppStatusIconInterface *
xapp_object_get_status_icon_interface (XAppObject *object);

Gets the XAppStatusIconInterface instance for the D-Bus interface org.x.StatusIcon on object , if any.

Parameters

object

A XAppObject.

 

Returns

A XAppStatusIconInterface that must be freed with g_object_unref() or NULL if object does not implement the interface.

[transfer full][nullable]


xapp_object_peek_status_icon_interface ()

XAppStatusIconInterface *
xapp_object_peek_status_icon_interface
                               (XAppObject *object);

Like xapp_object_get_status_icon_interface() but doesn't increase the reference count on the returned object.

It is not safe to use the returned object if you are on another thread than the one where the GDBusObjectManagerClient or GDBusObjectManagerServer for object is running.

[skip]

Parameters

object

A XAppObject.

 

Returns

A XAppStatusIconInterface or NULL if object does not implement the interface. Do not free the returned object, it is owned by object .

[transfer none][nullable]


xapp_object_proxy_new ()

XAppObjectProxy *
xapp_object_proxy_new (GDBusConnection *connection,
                       const gchar *object_path);

Creates a new proxy object.

Parameters

connection

A GDBusConnection.

 

object_path

An object path.

 

Returns

The proxy object.

[transfer full]


xapp_object_skeleton_new ()

XAppObjectSkeleton *
xapp_object_skeleton_new (const gchar *object_path);

Creates a new skeleton object.

Parameters

object_path

An object path.

 

Returns

The skeleton object.

[transfer full]


xapp_object_skeleton_set_status_icon_interface ()

void
xapp_object_skeleton_set_status_icon_interface
                               (XAppObjectSkeleton *object,
                                XAppStatusIconInterface *interface_);

Sets the XAppStatusIconInterface instance for the D-Bus interface org.x.StatusIcon on object .

Parameters

object

A XAppObjectSkeleton.

 

interface_

A XAppStatusIconInterface or NULL to clear the interface.

[nullable]

xapp_object_manager_client_get_proxy_type ()

GType
xapp_object_manager_client_get_proxy_type
                               (GDBusObjectManagerClient *manager,
                                const gchar *object_path,
                                const gchar *interface_name,
                                gpointer user_data);

A GDBusProxyTypeFunc that maps interface_name to the generated GDBusObjectProxy derived and GDBusProxy derived types.

Parameters

manager

A GDBusObjectManagerClient.

 

object_path

The object path of the remote object (unused).

 

interface_name

Interface name of the remote object or NULL to get the object proxy GType.

[nullable]

user_data

User data (unused).

 

Returns

A GDBusProxy derived GType if interface_name is not NULL, otherwise the GType for XAppObjectProxy.


xapp_object_manager_client_new ()

void
xapp_object_manager_client_new (GDBusConnection *connection,
                                GDBusObjectManagerClientFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Asynchronously creates GDBusObjectManagerClient using xapp_object_manager_client_get_proxy_type() as the GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details.

When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_object_manager_client_new_finish() to get the result of the operation.

See xapp_object_manager_client_new_sync() for the synchronous, blocking version of this constructor.

Parameters

connection

A GDBusConnection.

 

flags

Flags from the GDBusObjectManagerClientFlags enumeration.

 

name

A bus name (well-known or unique) or NULL if connection is not a message bus connection.

[nullable]

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied.

 

user_data

User data to pass to callback .

 

xapp_object_manager_client_new_finish ()

GDBusObjectManager *
xapp_object_manager_client_new_finish (GAsyncResult *res,
                                       GError **error);

Finishes an operation started with xapp_object_manager_client_new().

Parameters

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_object_manager_client_new().

 

error

Return location for error or NULL

 

Returns

The constructed object manager client or NULL if error is set.

[transfer full][type XAppObjectManagerClient]


xapp_object_manager_client_new_sync ()

GDBusObjectManager *
xapp_object_manager_client_new_sync (GDBusConnection *connection,
                                     GDBusObjectManagerClientFlags flags,
                                     const gchar *name,
                                     const gchar *object_path,
                                     GCancellable *cancellable,
                                     GError **error);

Synchronously creates GDBusObjectManagerClient using xapp_object_manager_client_get_proxy_type() as the GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details.

The calling thread is blocked until a reply is received.

See xapp_object_manager_client_new() for the asynchronous version of this constructor.

Parameters

connection

A GDBusConnection.

 

flags

Flags from the GDBusObjectManagerClientFlags enumeration.

 

name

A bus name (well-known or unique) or NULL if connection is not a message bus connection.

[nullable]

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL

 

Returns

The constructed object manager client or NULL if error is set.

[transfer full][type XAppObjectManagerClient]


xapp_object_manager_client_new_for_bus ()

void
xapp_object_manager_client_new_for_bus
                               (GBusType bus_type,
                                GDBusObjectManagerClientFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

Like xapp_object_manager_client_new() but takes a GBusType instead of a GDBusConnection.

When the operation is finished, callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). You can then call xapp_object_manager_client_new_for_bus_finish() to get the result of the operation.

See xapp_object_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor.

Parameters

bus_type

A GBusType.

 

flags

Flags from the GDBusObjectManagerClientFlags enumeration.

 

name

A bus name (well-known or unique).

 

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

callback

A GAsyncReadyCallback to call when the request is satisfied.

 

user_data

User data to pass to callback .

 

xapp_object_manager_client_new_for_bus_finish ()

GDBusObjectManager *
xapp_object_manager_client_new_for_bus_finish
                               (GAsyncResult *res,
                                GError **error);

Finishes an operation started with xapp_object_manager_client_new_for_bus().

Parameters

res

The GAsyncResult obtained from the GAsyncReadyCallback passed to xapp_object_manager_client_new_for_bus().

 

error

Return location for error or NULL

 

Returns

The constructed object manager client or NULL if error is set.

[transfer full][type XAppObjectManagerClient]


xapp_object_manager_client_new_for_bus_sync ()

GDBusObjectManager *
xapp_object_manager_client_new_for_bus_sync
                               (GBusType bus_type,
                                GDBusObjectManagerClientFlags flags,
                                const gchar *name,
                                const gchar *object_path,
                                GCancellable *cancellable,
                                GError **error);

Like xapp_object_manager_client_new_sync() but takes a GBusType instead of a GDBusConnection.

The calling thread is blocked until a reply is received.

See xapp_object_manager_client_new_for_bus() for the asynchronous version of this constructor.

Parameters

bus_type

A GBusType.

 

flags

Flags from the GDBusObjectManagerClientFlags enumeration.

 

name

A bus name (well-known or unique).

 

object_path

An object path.

 

cancellable

A GCancellable or NULL.

[nullable]

error

Return location for error or NULL

 

Returns

The constructed object manager client or NULL if error is set.

[transfer full][type XAppObjectManagerClient]

Property Details

The “status-icon-interface” property

  “status-icon-interface”    XAppStatusIconInterface *

The XAppStatusIconInterface instance corresponding to the D-Bus interface org.x.StatusIcon, if any.

Connect to the “notify” signal to get informed of property changes.

Owner: XAppObject

Flags: Read / Write


The “icon-name” property

  “icon-name”                char *

Represents the D-Bus property "IconName".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: NULL


The “icon-size” property

  “icon-size”                int

Represents the D-Bus property "IconSize".

Since the D-Bus property for this GObject property is both readable and writable, it is meaningful to both read from it and write to it on both the service- and client-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: 0


The “label” property

  “label”                    char *

Represents the D-Bus property "Label".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: NULL


The “metadata” property

  “metadata”                 char *

Represents the D-Bus property "Metadata".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: NULL


The “name” property

  “name”                     char *

Represents the D-Bus property "Name".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: NULL


The “primary-menu-is-open” property

  “primary-menu-is-open”     gboolean

Represents the D-Bus property "PrimaryMenuIsOpen".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: FALSE


The “secondary-menu-is-open” property

  “secondary-menu-is-open”   gboolean

Represents the D-Bus property "SecondaryMenuIsOpen".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: FALSE


The “tooltip-text” property

  “tooltip-text”             char *

Represents the D-Bus property "TooltipText".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: NULL


The “visible” property

  “visible”                  gboolean

Represents the D-Bus property "Visible".

Since the D-Bus property for this GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.

Owner: XAppStatusIconInterface

Flags: Read / Write

Default value: FALSE

Signal Details

The “handle-button-press” signal

gboolean
user_function (XAppStatusIconInterface *object,
               GDBusMethodInvocation   *invocation,
               int                      arg_x,
               int                      arg_y,
               guint                    arg_button,
               guint                    arg_time,
               int                      arg_panel_position,
               gpointer                 user_data)

Signal emitted when a remote caller is invoking the ButtonPress() D-Bus method.

If a signal handler returns TRUE, it means the signal handler will handle the invocation (e.g. take a reference to invocation and eventually call xapp_status_icon_interface_complete_button_press() or e.g. g_dbus_method_invocation_return_error() on it) and no other signal handlers will run. If no signal handler handles the invocation, the G_DBUS_ERROR_UNKNOWN_METHOD error is returned.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

 

arg_x

Argument passed by remote caller.

 

arg_y

Argument passed by remote caller.

 

arg_button

Argument passed by remote caller.

 

arg_time

Argument passed by remote caller.

 

arg_panel_position

Argument passed by remote caller.

 

user_data

user data set when the signal handler was connected.

 

Returns

G_DBUS_METHOD_INVOCATION_HANDLED or TRUE if the invocation was handled, G_DBUS_METHOD_INVOCATION_UNHANDLED or FALSE to let other signal handlers run.

Flags: Run Last


The “handle-button-release” signal

gboolean
user_function (XAppStatusIconInterface *object,
               GDBusMethodInvocation   *invocation,
               int                      arg_x,
               int                      arg_y,
               guint                    arg_button,
               guint                    arg_time,
               int                      arg_panel_position,
               gpointer                 user_data)

Signal emitted when a remote caller is invoking the ButtonRelease() D-Bus method.

If a signal handler returns TRUE, it means the signal handler will handle the invocation (e.g. take a reference to invocation and eventually call xapp_status_icon_interface_complete_button_release() or e.g. g_dbus_method_invocation_return_error() on it) and no other signal handlers will run. If no signal handler handles the invocation, the G_DBUS_ERROR_UNKNOWN_METHOD error is returned.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

 

arg_x

Argument passed by remote caller.

 

arg_y

Argument passed by remote caller.

 

arg_button

Argument passed by remote caller.

 

arg_time

Argument passed by remote caller.

 

arg_panel_position

Argument passed by remote caller.

 

user_data

user data set when the signal handler was connected.

 

Returns

G_DBUS_METHOD_INVOCATION_HANDLED or TRUE if the invocation was handled, G_DBUS_METHOD_INVOCATION_UNHANDLED or FALSE to let other signal handlers run.

Flags: Run Last


The “handle-scroll” signal

gboolean
user_function (XAppStatusIconInterface *object,
               GDBusMethodInvocation   *invocation,
               int                      arg_delta,
               int                      arg_orientation,
               guint                    arg_time,
               gpointer                 user_data)

Signal emitted when a remote caller is invoking the Scroll() D-Bus method.

If a signal handler returns TRUE, it means the signal handler will handle the invocation (e.g. take a reference to invocation and eventually call xapp_status_icon_interface_complete_scroll() or e.g. g_dbus_method_invocation_return_error() on it) and no other signal handlers will run. If no signal handler handles the invocation, the G_DBUS_ERROR_UNKNOWN_METHOD error is returned.

Parameters

object

A XAppStatusIconInterface.

 

invocation

A GDBusMethodInvocation.

 

arg_delta

Argument passed by remote caller.

 

arg_orientation

Argument passed by remote caller.

 

arg_time

Argument passed by remote caller.

 

user_data

user data set when the signal handler was connected.

 

Returns

G_DBUS_METHOD_INVOCATION_HANDLED or TRUE if the invocation was handled, G_DBUS_METHOD_INVOCATION_UNHANDLED or FALSE to let other signal handlers run.

Flags: Run Last

xapp-2.8.8/docs/reference/right.png0000664000175000017500000000027014736763051016151 0ustar fabiofabioPNG  IHDRaIDATx! AqaMI +^4YTM4D MyO/ɂ>E. Iץ"3!]l,(jE͇5DŖ<3'x0͌{nIu$2"]pf!N IENDB`xapp-2.8.8/docs/reference/right-insensitive.png0000664000175000017500000000035114736763051020507 0ustar fabiofabioPNG  IHDRaIDATxc|`߾}޽{2Ԑ ـ;v\5={lI6d۶m@+` Yj3 z-04/@NA 2YfC Ȏ%Z͛6@5CC5j~)@go RafIENDB`xapp-2.8.8/docs/reference/XAppVisibilityGroup.html0000664000175000017500000006634214736763051021165 0ustar fabiofabio XAppVisibilityGroup: XApp Reference Manual

XAppVisibilityGroup

XAppVisibilityGroup — Groups widgets to have their visibility or sensitivity controlled as a group, independent of their positions in any widget hierarchy.

Types and Values

Object Hierarchy

    GBoxed
    ╰── XAppVisibilityGroup

Description

You can use this to hide and show groups of widgets all at once, without having to specify each one. They do not have to have the same parents, or even have the same toplevel window.

If a widget is destroyed before the group is, it will be automatically removed from the visibility group. You only ever need to free the XAppVisibilityGroup itself.

Only the specific members of the group have their visibility and sensitivity set, not their descendants. No effort is made to track or prevent state changes made to individual widgets by outside influence.

Functions

xapp_visibility_group_new ()

XAppVisibilityGroup *
xapp_visibility_group_new (gboolean visible,
                           gboolean sensitive,
                           GSList *widgets);

Creates a new XAppVisibilityGroup.

If widgets is not NULL, adds these widgets to the group with the starting visibility and sensitivity state.

Parameters

visible

starting visibility state

 

sensitive

starting sensitivity state

 

widgets

list of GtkWidgets to add to the group.

[element-type GtkWidget][transfer none][nullable]

Returns

a new XAppVisibilityGroup. Use xapp_visibility_group_free when finished.

[transfer full]

Since: 2.2.15


xapp_visibility_group_add_widget ()

void
xapp_visibility_group_add_widget (XAppVisibilityGroup *group,
                                  GtkWidget *widget);

Adds widget to the visibility group.

Parameters

group

the visibility group

 

widget

the GtkWidget to add to the group

 

Since: 2.2.15


xapp_visibility_group_remove_widget ()

gboolean
xapp_visibility_group_remove_widget (XAppVisibilityGroup *group,
                                     GtkWidget *widget);

Parameters

group

the visibility group

 

widget

the GtkWidget to remove from the group

 

Returns

TRUE if the widget was found and removed.

Since: 2.2.15


xapp_visibility_group_hide ()

void
xapp_visibility_group_hide (XAppVisibilityGroup *group);

Hide all widgets in the group.

Parameters

group

the visibility group

 

Since: 2.2.15


xapp_visibility_group_show ()

void
xapp_visibility_group_show (XAppVisibilityGroup *group);

Show all widgets in the group.

Parameters

group

the visibility group

 

Since: 2.2.15


xapp_visibility_group_set_visible ()

void
xapp_visibility_group_set_visible (XAppVisibilityGroup *group,
                                   gboolean visible);

Set the visibility of all widgets in the group.

Parameters

group

the visibility group

 

visible

TRUE to make the widgets visible.

 

Since: 2.2.15


xapp_visibility_group_get_visible ()

gboolean
xapp_visibility_group_get_visible (XAppVisibilityGroup *group);

Get the visibility of the group.

There is no guarantee that all widgets in the group actually are in the returned state, if they've had their visibility individually modified since the last time the group was set.

Parameters

group

the visibility group.

 

Returns

The visibility state of the group.

Since: 2.2.15


xapp_visibility_group_set_sensitive ()

void
xapp_visibility_group_set_sensitive (XAppVisibilityGroup *group,
                                     gboolean sensitive);

Set the sensitivity of all widgets in group.

Parameters

group

the visibility group.

 

sensitive

TRUE to make the widgets sensitive.

 

Since: 2.2.15


xapp_visibility_group_get_sensitive ()

gboolean
xapp_visibility_group_get_sensitive (XAppVisibilityGroup *group);

Get the sensitivity of the group.

There is no guarantee that all widgets in the group actually are in the returned state, if they've had their sensitivity individually modified since the last time the group was set.

Parameters

group

the visibility group.

 

Returns

The sensitivity state of the group.

Since: 2.2.15


xapp_visibility_group_get_widgets ()

GSList *
xapp_visibility_group_get_widgets (XAppVisibilityGroup *group);

Returns the members of the group or NULL if the group is empty.

Parameters

group

the visibility group

 

Returns

a list of members of the group.

The list is owned by XApp, do not free.

[element-type GtkWidget][transfer none]

Since: 2.2.15


xapp_visibility_group_set_widgets ()

void
xapp_visibility_group_set_widgets (XAppVisibilityGroup *group,
                                   GSList *widgets);

Parameters

group

the visibility group

 

widgets

The widgets to add to this group, replacing any existing ones.

[nullable][element-type GtkWidget][transfer none]

Since: 2.2.15

Types and Values

struct XAppVisibilityGroup

struct XAppVisibilityGroup {
    GSList *widgets;
    gboolean visible;
    gboolean sensitive;
};

A group of widgets that can have their visibility and sensitivity controlled together.

Members

GSList *widgets;

The GtkWidget members of this group.

[element-type Gtk.Widget][transfer none][nullable]

gboolean visible;

The current visible state of the group. There is no guarantee that all members are actually in this state.

 

gboolean sensitive;

The current sensitive state of the group. There is no guarantee that all members are actually in this state.

 
xapp-2.8.8/docs/reference/style.css0000664000175000017500000002736114736763051016212 0ustar fabiofabiobody { font-family: cantarell, sans-serif; } .synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; background: rgba(238, 238, 236, 0.5); border: solid 1px rgb(238, 238, 236); padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ /* fallback for no rgba support */ background: #e6f3ff; border: solid 1px #729fcf; background: rgba(114, 159, 207, 0.1); border: solid 1px rgba(114, 159, 207, 0.2); padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } span.nowrap { white-space: nowrap; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } .function_type, .variable_type, .property_type, .signal_type, .parameter_name, .struct_member_name, .union_member_name, .define_keyword, .datatype_keyword, .typedef_keyword { text-align: right; } /* dim non-primary columns */ .c_punctuation, .function_type, .variable_type, .property_type, .signal_type, .define_keyword, .datatype_keyword, .typedef_keyword, .property_flags, .signal_flags, .parameter_annotations, .enum_member_annotations, .struct_member_annotations, .union_member_annotations { color: #888a85; } .function_type a, .function_type a:visited, .function_type a:hover, .property_type a, .property_type a:visited, .property_type a:hover, .signal_type a, .signal_type a:visited, .signal_type a:hover, .signal_flags a, .signal_flags a:visited, .signal_flags a:hover { color: #729fcf; } td p { margin: 0.25em; } div.informaltable table[border="1"], div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.informaltable table[border="1"] td, div.informaltable table th, div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.informaltable table[border="1"] th, div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } h4 { color: #555753; margin-top: 1em; margin-bottom: 1em; } hr { /* tango:aluminium 1 */ color: #d3d7cf; background: #d3d7cf; border: none 0px; height: 1px; clear: both; margin: 2.0em 0em 2.0em 0em; } dl.toc dt { padding-bottom: 0.25em; } dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; font-weight: bold; } dl.toc > dl { padding-bottom: 0.5em; } .parameter { font-style: normal; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .informalfigure, .figure { margin: 1em; } .informalexample, .example { margin-top: 1em; margin-bottom: 1em; } .warning { /* tango:orange 0/1 */ background: #ffeed9; background: rgba(252, 175, 62, 0.1); border-color: #ffb04f; border-color: rgba(252, 175, 62, 0.2); } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; background: rgba(138, 226, 52, 0.1); border-color: #abf562; border-color: rgba(138, 226, 52, 0.2); } div.blockquote { border-color: #eeeeec; } .note, .warning, div.blockquote { padding: 0.5em; border-width: 1px; border-style: solid; margin: 2em; } .note p, .warning p { margin: 0; } div.warning h3.title, div.note h3.title { display: none; } p + div.section { margin-top: 1em; } div.refnamediv, div.refsynopsisdiv, div.refsect1, div.refsect2, div.toc, div.section { margin-bottom: 1em; } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .lineart { color: #d3d7cf; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-weight: normal; } .structfield { font-style: normal; font-weight: normal; } acronym,abbr { border-bottom: 1px dotted gray; } .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; border: solid 1px rgba(114, 159, 207, 0.2); padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; background: rgba(114, 159, 207, 0.2); /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; background: rgba(114, 159, 207, 0.1); } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; background: none; } .listing_lines pre, .listing_code pre { margin: 0px; } @media screen { /* these have a as a first child, but since there are no parent selectors * we can't use that. */ a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the navigation */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 2.5em; padding-bottom: 500px; max-width: 60em; } p { max-width: 60em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; background: #e2e2e2; border-bottom: solid 1px #babdb6; border-spacing: 5px; margin-top: 0; margin-bottom: 0; top: 0; left: 0; z-index: 10; } table.navigation#top td { padding-left: 6px; padding-right: 6px; } .navigation a, .navigation a:visited { /* tango:sky blue 3 */ color: #204a87; } .navigation a:hover { /* tango:sky blue 2 */ color: #3465a4; } td.shortcuts { /* tango:sky blue 2 */ color: #3465a4; font-size: 80%; white-space: nowrap; } td.shortcuts .dim { color: #babdb6; } .navigation .title { font-size: 80%; max-width: none; margin: 0px; font-weight: normal; } } @media screen and (min-width: 60em) { /* screen larger than 60em */ body { margin: auto; } } @media screen and (max-width: 60em) { /* screen less than 60em */ #nav_hierarchy { display: none; } #nav_interfaces { display: none; } #nav_prerequisites { display: none; } #nav_derived_interfaces { display: none; } #nav_implementations { display: none; } #nav_child_properties { display: none; } #nav_style_properties { display: none; } #nav_index { display: none; } #nav_glossary { display: none; } .gallery_image { display: none; } .property_flags { display: none; } .signal_flags { display: none; } .parameter_annotations { display: none; } .enum_member_annotations { display: none; } .struct_member_annotations { display: none; } .union_member_annotations { display: none; } /* now that a column is hidden, optimize space */ col.parameters_name { width: auto; } col.parameters_description { width: auto; } col.struct_members_name { width: auto; } col.struct_members_description { width: auto; } col.enum_members_name { width: auto; } col.enum_members_description { width: auto; } col.union_members_name { width: auto; } col.union_members_description { width: auto; } .listing_lines { display: none; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; background: #e2e2e2; border: solid 1px #babdb6; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .hll { background-color: #ffffcc } .c { color: #3D7B7B; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ .cp { color: #9C6500 } /* Comment.Preproc */ .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #E40000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #008400 } /* Generic.Inserted */ .go { color: #717171 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0044DD } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #687822 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #717171; font-weight: bold } /* Name.Entity */ .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #767600 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mb { color: #666666 } /* Literal.Number.Bin */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sa { color: #BA2121 } /* Literal.String.Affix */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .dl { color: #BA2121 } /* Literal.String.Delimiter */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #A45A77 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .fm { color: #0000FF } /* Name.Function.Magic */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .vm { color: #19177C } /* Name.Variable.Magic */ .il { color: #666666 } /* Literal.Number.Integer.Long */xapp-2.8.8/docs/reference/XAppGpuOffloadHelper.html0000664000175000017500000007036414736763051021206 0ustar fabiofabio XAppGpuOffloadHelper: XApp Reference Manual

XAppGpuOffloadHelper

XAppGpuOffloadHelper — Simple interface for Switcheroo.

Signals

void ready Action

Object Hierarchy

    GBoxed
    ╰── XAppGpuInfo
    GObject
    ╰── XAppGpuOffloadHelper

Description

XAppGpuOffloadHelper is class that provides a reliable property cache and simple return methods for getting offload_helper parameters and conditions from the Switcheroo interface.

Since 2.6

Functions

xapp_gpu_offload_helper_get ()

XAppGpuOffloadHelper *
xapp_gpu_offload_helper_get (void);

Creates a new XAppGpuOffloadHelper instance.

The “ready” signal will be emitted when the helper is initialized (successfully or not).

Returns

a new XAppGpuOffloadHelper.

[transfer none]

Since: 2.6


xapp_gpu_offload_helper_get_sync ()

XAppGpuOffloadHelper *
xapp_gpu_offload_helper_get_sync (void);

Creates a new XAppGpuOffloadHelper instance. This performs initialization synchronously, and can potentially block.

Use xapp_gpu_offload_helper_is_ready() to see if the helper was initialized successfully.

Returns

a new XAppGpuOffloadHelper, fully initialized.

[transfer none]

Since: 2.6


xapp_gpu_offload_helper_is_ready ()

gboolean
xapp_gpu_offload_helper_is_ready (XAppGpuOffloadHelper *helper);

Checks if the helper is ready and valid. This does not mean offload support exists.

Parameters

helper

The XAppGpuOffloadHelper.

 

Returns

TRUE if the helper has been successfully initialized.

Since: 2.6


xapp_gpu_offload_helper_is_offload_supported ()

gboolean
xapp_gpu_offload_helper_is_offload_supported
                               (XAppGpuOffloadHelper *helper);

Checks if there is a non-default GPU available for offloading.

Parameters

helper

The XAppGpuOffloadHelper.

 

Returns

TRUE if there is an extra GPU available.

Since: 2.6


xapp_gpu_offload_helper_get_n_gpus ()

gint
xapp_gpu_offload_helper_get_n_gpus (XAppGpuOffloadHelper *helper);

Gets the number of GPUs noticed by Switcheroo.

Parameters

helper

The XAppGpuOffloadHelper.

 

Returns

the total number of GPUs. A return value larger than 1 implies there are offloadable GPUs available.

Since: 2.6


xapp_gpu_offload_helper_get_offload_infos ()

GList *
xapp_gpu_offload_helper_get_offload_infos
                               (XAppGpuOffloadHelper *helper);

Generates a list of XAppGpuInfos that can be offloaded to, if there are any.

Parameters

helper

The XAppGpuOffloadHelper.

 

Returns

a list of XAppGpuInfos or NULL if there is only a single GPU. The elements are owned by helper but the container itself should be freed.

[element-type XAppGpuInfo][transfer container]

Since: 2.6


xapp_gpu_offload_helper_get_default_info ()

XAppGpuInfo *
xapp_gpu_offload_helper_get_default_info
                               (XAppGpuOffloadHelper *helper);

Returns an XAppGpuInfo for the default GPU.

Parameters

helper

The XAppGpuOffloadHelper.

 

Returns

the default XAppGpuInfo. Do not free.

[transfer none]

Since: 2.6


xapp_gpu_offload_helper_get_info_by_id ()

XAppGpuInfo *
xapp_gpu_offload_helper_get_info_by_id
                               (XAppGpuOffloadHelper *helper,
                                gint id);

Returns an XAppGpuInfo with the given ID.

Parameters

helper

The XAppGpuOffloadHelper.

 

id

The ID of the info to retrieve.

 

Returns

the appropriate XAppGpuInfo, or NULL if id was invalid.

[transfer none]

Since: 2.6


xapp_gpu_info_get_shell_env_prefix ()

gchar *
xapp_gpu_info_get_shell_env_prefix (XAppGpuInfo *info);

Creates a new string in a form intended to prefix a shell command, containing the appropriate name/values for this gpu. For example:

__GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1

Parameters

info

An XAppGpuInfo.

 

Returns

A new string, free with g_free().

Since 2.6.

[transfer full]

Types and Values

XAPP_TYPE_GPU_OFFLOAD_HELPER

#define XAPP_TYPE_GPU_OFFLOAD_HELPER xapp_gpu_offload_helper_get_type ()

struct XAppGpuInfo

struct XAppGpuInfo {
    gint id;
    gboolean is_default;
    gchar *display_name;
    gchar **env_strv;
};

Information about a single GPU used for offloading. The length of env_strv will always be an even number.

Members

gint id;

An identifier that can be used to refer to this GPU.

 

gboolean is_default;

Whether this GPU is used by default.

 

gchar *display_name;

User-visible name of the GPU.

 

gchar **env_strv;

A string array containing alternating environment variables names and values to use to enable the gpu.

[array zero-terminated=1]

XAppGpuOffloadHelper

typedef struct _XAppGpuOffloadHelper XAppGpuOffloadHelper;

Signal Details

The “ready” signal

void
user_function (XAppGpuOffloadHelper *helper,
               gboolean              success,
               gpointer              user_data)

This signal is emitted by the helper when it has completed gathering GPU information. It will only be sent once.

Parameters

helper

the XAppGpuOffloadHelper

 

success

Whether or not the helper initialize successfully.

 

user_data

user data set when the signal handler was connected.

 

Flags: Action

xapp-2.8.8/docs/reference/libxapp.devhelp20000664000175000017500000011404214736763051017423 0ustar fabiofabio xapp-2.8.8/docs/reference/index.html0000664000175000017500000001012714736763051016325 0ustar fabiofabio XApp Reference Manual: XApp Reference Manual

xapp 2.8.0


API reference
XAppDarkModeManager — Manages an application's dark mode preference for it.
XAppFavorites — Keeps track of favorite files.
XAppGtkWindow — A subclass of GtkWindow that allows additional communication with the window manager.
XAppGpuOffloadHelper — Simple interface for Switcheroo.
XAppIconChooserButton — A button for selecting an icon
XAppIconChooserDialog — A dialog for selecting an icon
XAppKbdLayoutController — Keyboard layout selection UI element provider.
XAppMonitorBlanker — Blank and unblank unused monitors
XAppPreferencesWindow — A base preferences window
XAppStackSidebar — An automatic sidebar widget
XAppStatusIcon — Broadcasts status information over DBUS
XAppStatusIconMonitor — Looks for XAppStatusIcons on DBUS and communicates info to an applet to represent the icons.
XAppObjectManagerClient
xapp-util
XAppVisibilityGroup — Groups widgets to have their visibility or sensitivity controlled as a group, independent of their positions in any widget hierarchy.
Object Hierarchy
API Index
Annotation Glossary
xapp-2.8.8/docs/reference/left.png0000664000175000017500000000027114736763051015767 0ustar fabiofabioPNG  IHDRaIDATx! AaLUIO,z1=zFtj$w_߾zS:l R8I5FE<4(ݔ2{73͉҄':F 64I7JM>r"(!QuIENDB`xapp-2.8.8/docs/reference/api-index-full.html0000664000175000017500000023140614736763051020041 0ustar fabiofabio API Index: XApp Reference Manual

API Index

D

XAppDarkModeManager, struct in XAppDarkModeManager
xapp_dark_mode_manager_new, function in XAppDarkModeManager
DEBUG, macro in xapp-debug
xapp_debug, function in xapp-debug
DebugFlags, enum in xapp-debug
DEBUGGING, macro in xapp-debug
xapp_debug_flag_is_set, function in xapp-debug
debug_flag_to_string, function in xapp-debug
xapp_debug_set_flags, function in xapp-debug
xapp_debug_valist, function in xapp-debug

F

XAppFavoriteInfo, struct in XAppFavorites
XAppFavorites, struct in XAppFavorites
XAppFavorites::changed, object signal in XAppFavorites
XAppFavoritesItemSelectedCallback, user_function in XAppFavorites
xapp_favorites_add, function in XAppFavorites
xapp_favorites_create_actions, function in XAppFavorites
xapp_favorites_create_menu, function in XAppFavorites
xapp_favorites_find_by_display_name, function in XAppFavorites
xapp_favorites_find_by_uri, function in XAppFavorites
xapp_favorites_get_default, function in XAppFavorites
xapp_favorites_get_favorites, function in XAppFavorites
xapp_favorites_get_n_favorites, function in XAppFavorites
xapp_favorites_launch, function in XAppFavorites
xapp_favorites_remove, function in XAppFavorites
xapp_favorites_rename, function in XAppFavorites
xapp_favorite_info_copy, function in XAppFavorites
xapp_favorite_info_free, function in XAppFavorites

G

xapp_get_tmp_dir, function in xapp-util
XAppGpuInfo, struct in XAppGpuOffloadHelper
XAppGpuOffloadHelper, struct in XAppGpuOffloadHelper
XAppGpuOffloadHelper::ready, object signal in XAppGpuOffloadHelper
xapp_gpu_info_get_shell_env_prefix, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get_default_info, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get_info_by_id, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get_n_gpus, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get_offload_infos, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_get_sync, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_is_offload_supported, function in XAppGpuOffloadHelper
xapp_gpu_offload_helper_is_ready, function in XAppGpuOffloadHelper
XAppGtkWindow, struct in XAppGtkWindow
XAppGtkWindowClass, struct in XAppGtkWindow
xapp_gtk_window_new, function in XAppGtkWindow
xapp_gtk_window_set_icon_from_file, function in XAppGtkWindow
xapp_gtk_window_set_icon_name, function in XAppGtkWindow
xapp_gtk_window_set_progress, function in XAppGtkWindow
xapp_gtk_window_set_progress_pulse, function in XAppGtkWindow

I

XAppIconChooserButton, struct in XAppIconChooserButton
XAppIconChooserButton:category, object property in XAppIconChooserButton
XAppIconChooserButton:icon, object property in XAppIconChooserButton
XAppIconChooserButton:icon-size, object property in XAppIconChooserButton
XAppIconChooserDialog, struct in XAppIconChooserDialog
XAppIconChooserDialog::close, object signal in XAppIconChooserDialog
XAppIconChooserDialog::select, object signal in XAppIconChooserDialog
XAppIconChooserDialog:allow-paths, object property in XAppIconChooserDialog
XAppIconChooserDialog:default-icon, object property in XAppIconChooserDialog
XAppIconChooserDialog:icon-size, object property in XAppIconChooserDialog
XAppIconSize, enum in XAppIconChooserDialog
xapp_icon_chooser_button_get_dialog, function in XAppIconChooserButton
xapp_icon_chooser_button_get_icon, function in XAppIconChooserButton
xapp_icon_chooser_button_new, function in XAppIconChooserButton
xapp_icon_chooser_button_new_with_size, function in XAppIconChooserButton
xapp_icon_chooser_button_set_default_category, function in XAppIconChooserButton
xapp_icon_chooser_button_set_icon, function in XAppIconChooserButton
xapp_icon_chooser_button_set_icon_size, function in XAppIconChooserButton
xapp_icon_chooser_dialog_add_button, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_add_custom_category, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_get_default_icon, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_get_icon_string, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_new, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_run, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_run_with_category, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_run_with_icon, function in XAppIconChooserDialog
xapp_icon_chooser_dialog_set_default_icon, function in XAppIconChooserDialog

K

XAppKbdLayoutController::config-changed, object signal in XAppKbdLayoutController
XAppKbdLayoutController::layout-changed, object signal in XAppKbdLayoutController
XAppKbdLayoutController:enabled, object property in XAppKbdLayoutController
xapp_kbd_layout_controller_get_all_names, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_flag_id, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_icon_name, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_name, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_short_group_label, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_current_variant_label, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_enabled, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_flag_id_for_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_icon_name_for_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_short_group_label_for_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_get_variant_label_for_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_new, function in XAppKbdLayoutController
xapp_kbd_layout_controller_next_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_previous_group, function in XAppKbdLayoutController
xapp_kbd_layout_controller_render_cairo_subscript, function in XAppKbdLayoutController
xapp_kbd_layout_controller_set_current_group, function in XAppKbdLayoutController

M

XAppMonitorBlanker, struct in XAppMonitorBlanker
xapp_monitor_blanker_are_monitors_blanked, function in XAppMonitorBlanker
xapp_monitor_blanker_blank_other_monitors, function in XAppMonitorBlanker
xapp_monitor_blanker_new, function in XAppMonitorBlanker
xapp_monitor_blanker_unblank_monitors, function in XAppMonitorBlanker

O

XAppObject:status-icon-interface, object property in XAppObjectManagerClient
xapp_object_get_status_icon_interface, function in XAppObjectManagerClient
xapp_object_manager_client_get_proxy_type, function in XAppObjectManagerClient
xapp_object_manager_client_new, function in XAppObjectManagerClient
xapp_object_manager_client_new_finish, function in XAppObjectManagerClient
xapp_object_manager_client_new_for_bus, function in XAppObjectManagerClient
xapp_object_manager_client_new_for_bus_finish, function in XAppObjectManagerClient
xapp_object_manager_client_new_for_bus_sync, function in XAppObjectManagerClient
xapp_object_manager_client_new_sync, function in XAppObjectManagerClient
xapp_object_peek_status_icon_interface, function in XAppObjectManagerClient
xapp_object_proxy_new, function in XAppObjectManagerClient
xapp_object_skeleton_new, function in XAppObjectManagerClient
xapp_object_skeleton_set_status_icon_interface, function in XAppObjectManagerClient

P

xapp_pango_font_string_to_css, function in xapp-util
XAppPreferencesWindow, struct in XAppPreferencesWindow
XAppPreferencesWindow::close, object signal in XAppPreferencesWindow
XAppPreferencesWindowClass, struct in XAppPreferencesWindow
xapp_preferences_window_add_button, function in XAppPreferencesWindow
xapp_preferences_window_add_page, function in XAppPreferencesWindow
xapp_preferences_window_new, function in XAppPreferencesWindow

S

XAppScrollDirection, enum in XAppStatusIcon
xapp_set_window_icon_from_file, function in XAppGtkWindow
xapp_set_window_icon_name, function in XAppGtkWindow
xapp_set_window_progress, function in XAppGtkWindow
xapp_set_window_progress_pulse, function in XAppGtkWindow
xapp_set_xid_icon_from_file, function in XAppGtkWindow
xapp_set_xid_icon_name, function in XAppGtkWindow
xapp_set_xid_progress, function in XAppGtkWindow
xapp_set_xid_progress_pulse, function in XAppGtkWindow
XAppStackSidebar, struct in XAppStackSidebar
XAppStackSidebar:stack, object property in XAppStackSidebar
xapp_stack_sidebar_get_stack, function in XAppStackSidebar
xapp_stack_sidebar_new, function in XAppStackSidebar
xapp_stack_sidebar_set_stack, function in XAppStackSidebar
XAppStatusIcon, struct in XAppStatusIcon
XAppStatusIcon::activate, object signal in XAppStatusIcon
XAppStatusIcon::button-press-event, object signal in XAppStatusIcon
XAppStatusIcon::button-release-event, object signal in XAppStatusIcon
XAppStatusIcon::scroll-event, object signal in XAppStatusIcon
XAppStatusIcon::state-changed, object signal in XAppStatusIcon
XAppStatusIcon:icon-size, object property in XAppStatusIcon
XAppStatusIcon:name, object property in XAppStatusIcon
XAppStatusIcon:primary-menu, object property in XAppStatusIcon
XAppStatusIcon:secondary-menu, object property in XAppStatusIcon
XAppStatusIconInterface::handle-button-press, object signal in XAppObjectManagerClient
XAppStatusIconInterface::handle-button-release, object signal in XAppObjectManagerClient
XAppStatusIconInterface::handle-scroll, object signal in XAppObjectManagerClient
XAppStatusIconInterface:icon-name, object property in XAppObjectManagerClient
XAppStatusIconInterface:icon-size, object property in XAppObjectManagerClient
XAppStatusIconInterface:label, object property in XAppObjectManagerClient
XAppStatusIconInterface:metadata, object property in XAppObjectManagerClient
XAppStatusIconInterface:name, object property in XAppObjectManagerClient
XAppStatusIconInterface:primary-menu-is-open, object property in XAppObjectManagerClient
XAppStatusIconInterface:secondary-menu-is-open, object property in XAppObjectManagerClient
XAppStatusIconInterface:tooltip-text, object property in XAppObjectManagerClient
XAppStatusIconInterface:visible, object property in XAppObjectManagerClient
XAppStatusIconMonitor, struct in XAppStatusIconMonitor
XAppStatusIconMonitor::icon-added, object signal in XAppStatusIconMonitor
XAppStatusIconMonitor::icon-removed, object signal in XAppStatusIconMonitor
XAppStatusIconState, enum in XAppStatusIcon
xapp_status_icon_any_monitors, function in XAppStatusIcon
xapp_status_icon_get_icon_size, function in XAppStatusIcon
xapp_status_icon_get_primary_menu, function in XAppStatusIcon
xapp_status_icon_get_secondary_menu, function in XAppStatusIcon
xapp_status_icon_get_state, function in XAppStatusIcon
xapp_status_icon_get_visible, function in XAppStatusIcon
xapp_status_icon_interface_call_button_press, function in XAppObjectManagerClient
xapp_status_icon_interface_call_button_press_finish, function in XAppObjectManagerClient
xapp_status_icon_interface_call_button_press_sync, function in XAppObjectManagerClient
xapp_status_icon_interface_call_button_release, function in XAppObjectManagerClient
xapp_status_icon_interface_call_button_release_finish, function in XAppObjectManagerClient
xapp_status_icon_interface_call_button_release_sync, function in XAppObjectManagerClient
xapp_status_icon_interface_call_scroll, function in XAppObjectManagerClient
xapp_status_icon_interface_call_scroll_finish, function in XAppObjectManagerClient
xapp_status_icon_interface_call_scroll_sync, function in XAppObjectManagerClient
xapp_status_icon_interface_complete_button_press, function in XAppObjectManagerClient
xapp_status_icon_interface_complete_button_release, function in XAppObjectManagerClient
xapp_status_icon_interface_complete_scroll, function in XAppObjectManagerClient
xapp_status_icon_interface_dup_icon_name, function in XAppObjectManagerClient
xapp_status_icon_interface_dup_label, function in XAppObjectManagerClient
xapp_status_icon_interface_dup_metadata, function in XAppObjectManagerClient
xapp_status_icon_interface_dup_name, function in XAppObjectManagerClient
xapp_status_icon_interface_dup_tooltip_text, function in XAppObjectManagerClient
xapp_status_icon_interface_get_icon_name, function in XAppObjectManagerClient
xapp_status_icon_interface_get_icon_size, function in XAppObjectManagerClient
xapp_status_icon_interface_get_label, function in XAppObjectManagerClient
xapp_status_icon_interface_get_metadata, function in XAppObjectManagerClient
xapp_status_icon_interface_get_name, function in XAppObjectManagerClient
xapp_status_icon_interface_get_primary_menu_is_open, function in XAppObjectManagerClient
xapp_status_icon_interface_get_secondary_menu_is_open, function in XAppObjectManagerClient
xapp_status_icon_interface_get_tooltip_text, function in XAppObjectManagerClient
xapp_status_icon_interface_get_visible, function in XAppObjectManagerClient
xapp_status_icon_interface_interface_info, function in XAppObjectManagerClient
xapp_status_icon_interface_override_properties, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new_finish, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new_for_bus, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new_for_bus_finish, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new_for_bus_sync, function in XAppObjectManagerClient
xapp_status_icon_interface_proxy_new_sync, function in XAppObjectManagerClient
xapp_status_icon_interface_set_icon_name, function in XAppObjectManagerClient
xapp_status_icon_interface_set_icon_size, function in XAppObjectManagerClient
xapp_status_icon_interface_set_label, function in XAppObjectManagerClient
xapp_status_icon_interface_set_metadata, function in XAppObjectManagerClient
xapp_status_icon_interface_set_name, function in XAppObjectManagerClient
xapp_status_icon_interface_set_primary_menu_is_open, function in XAppObjectManagerClient
xapp_status_icon_interface_set_secondary_menu_is_open, function in XAppObjectManagerClient
xapp_status_icon_interface_set_tooltip_text, function in XAppObjectManagerClient
xapp_status_icon_interface_set_visible, function in XAppObjectManagerClient
xapp_status_icon_interface_skeleton_new, function in XAppObjectManagerClient
xapp_status_icon_monitor_list_icons, function in XAppStatusIconMonitor
xapp_status_icon_monitor_new, function in XAppStatusIconMonitor
xapp_status_icon_new, function in XAppStatusIcon
xapp_status_icon_new_with_name, function in XAppStatusIcon
xapp_status_icon_popup_menu, function in XAppStatusIcon
xapp_status_icon_set_icon_name, function in XAppStatusIcon
xapp_status_icon_set_label, function in XAppStatusIcon
xapp_status_icon_set_metadata, function in XAppStatusIcon
xapp_status_icon_set_name, function in XAppStatusIcon
xapp_status_icon_set_primary_menu, function in XAppStatusIcon
xapp_status_icon_set_secondary_menu, function in XAppStatusIcon
xapp_status_icon_set_tooltip_text, function in XAppStatusIcon
xapp_status_icon_set_visible, function in XAppStatusIcon
XAppStyleManager, struct in XAppStyleManager
XAppStyleManager:widget, object property in XAppStyleManager
xapp_style_manager_get_widget, function in XAppStyleManager
xapp_style_manager_new, function in XAppStyleManager
xapp_style_manager_remove_style_property, function in XAppStyleManager
xapp_style_manager_set_from_pango_font_string, function in XAppStyleManager
xapp_style_manager_set_style_property, function in XAppStyleManager
xapp_style_manager_set_widget, function in XAppStyleManager
XAppSwitcherooControl:gpus, object property in XAppSwitcherooControlSkeleton
XAppSwitcherooControl:has-dual-gpu, object property in XAppSwitcherooControlSkeleton
XAppSwitcherooControl:num-gpus, object property in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_dup_gpus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_get_gpus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_get_has_dual_gpu, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_get_num_gpus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_interface_info, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_override_properties, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new_finish, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new_for_bus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new_for_bus_finish, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new_for_bus_sync, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_proxy_new_sync, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_set_gpus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_set_has_dual_gpu, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_set_num_gpus, function in XAppSwitcherooControlSkeleton
xapp_switcheroo_control_skeleton_new, function in XAppSwitcherooControlSkeleton

T

XAPP_TYPE_DARK_MODE_MANAGER, macro in XAppDarkModeManager
XAPP_TYPE_FAVORITES, macro in XAppFavorites
XAPP_TYPE_GPU_OFFLOAD_HELPER, macro in XAppGpuOffloadHelper
XAPP_TYPE_GTK_WINDOW, macro in XAppGtkWindow
XAPP_TYPE_ICON_CHOOSER_BUTTON, macro in XAppIconChooserButton
XAPP_TYPE_ICON_CHOOSER_DIALOG, macro in XAppIconChooserDialog
XAPP_TYPE_MONITOR_BLANKER, macro in XAppMonitorBlanker
XAPP_TYPE_PREFERENCES_WINDOW, macro in XAppPreferencesWindow
XAPP_TYPE_STACK_SIDEBAR, macro in XAppStackSidebar
XAPP_TYPE_STATUS_ICON, macro in XAppStatusIcon
XAPP_TYPE_STATUS_ICON_MONITOR, macro in XAppStatusIconMonitor
XAPP_TYPE_STYLE_MANAGER, macro in XAppStyleManager

U

xapp_util_get_session_is_running, function in xapp-util
xapp_util_gpu_offload_supported, function in xapp-util

V

XAppVisibilityGroup, struct in XAppVisibilityGroup
xapp_visibility_group_add_widget, function in XAppVisibilityGroup
xapp_visibility_group_get_sensitive, function in XAppVisibilityGroup
xapp_visibility_group_get_visible, function in XAppVisibilityGroup
xapp_visibility_group_get_widgets, function in XAppVisibilityGroup
xapp_visibility_group_hide, function in XAppVisibilityGroup
xapp_visibility_group_new, function in XAppVisibilityGroup
xapp_visibility_group_remove_widget, function in XAppVisibilityGroup
xapp_visibility_group_set_sensitive, function in XAppVisibilityGroup
xapp_visibility_group_set_visible, function in XAppVisibilityGroup
xapp_visibility_group_set_widgets, function in XAppVisibilityGroup
xapp_visibility_group_show, function in XAppVisibilityGroup
xapp-2.8.8/docs/reference/libxapp-xapp-util.html0000664000175000017500000001756014736763051020606 0ustar fabiofabio xapp-util: XApp Reference Manual

xapp-util

xapp-util

Description

Functions

xapp_util_gpu_offload_supported ()

gboolean
xapp_util_gpu_offload_supported (void);

Performs a check to see if on-demand mode for discrete graphics is supported.

Returns

TRUE if supported.

Since: 1.8


xapp_util_get_session_is_running ()

gboolean
xapp_util_get_session_is_running (void);

Check if the Session Manager is currently in the "Running" phase.

Returns

TRUE if the session is running.

Since: 2.0


xapp_pango_font_string_to_css ()

gchar *
xapp_pango_font_string_to_css (const char *pango_font_string);

Converts a pango font description string to a string suitable for use with the css "font" tag. The font description must contain the font family and font size or conversion will fail and NULL will be returned

Parameters

pango_font_string

a pango font description string

 

Returns

the css compatible font string or NULL if the conversion failed.

[transfer full]

Since: 2.2


xapp_get_tmp_dir ()

const gchar *
xapp_get_tmp_dir (void);

Provides the path to the system's temporary files folder. This is identical to g_get_tmp_dir, but includes the /dev/shm ramdisk as the first choice for a temporary folder.

Returns

the directory to use for temporary files.

[type filename][transfer none]

Since: 2.2.16

xapp-2.8.8/docs/reference/XAppStackSidebar.html0000664000175000017500000003172714736763051020357 0ustar fabiofabio XAppStackSidebar: XApp Reference Manual

XAppStackSidebar

XAppStackSidebar — An automatic sidebar widget

Properties

GtkStack * stack Read / Write

Types and Values

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ╰── GtkBin
                    ╰── XAppStackSidebar

Implemented Interfaces

XAppStackSidebar implements AtkImplementorIface and GtkBuildable.

Description

A XAppStackSidebar allows you to quickly and easily provide a consistent "sidebar" object for your user interface

In order to use a XAppStackSidebar, you simply use a GtkStack to organize your UI flow, and add the sidebar to your sidebar area. You can use xapp_stack_sidebar_set_stack() to connect the XAppStackSidebar to the GtkStack. The XAppStackSidebar is an extended version of the the GtkStackSidebar that allows showing an icon in addition to the text.

CSS nodes

XAppStackSidebar has a single CSS node with the name stacksidebar and style class .sidebar

When circumstances require it, XAppStackSidebar adds the .needs-attention style class to the widgets representing the stack pages.

Functions

xapp_stack_sidebar_new ()

XAppStackSidebar *
xapp_stack_sidebar_new (void);

Creates a new sidebar.

Returns

the new XAppStackSidebar


xapp_stack_sidebar_set_stack ()

void
xapp_stack_sidebar_set_stack (XAppStackSidebar *sidebar,
                              GtkStack *stack);

Set the GtkStack associated with this XAppStackSidebar.

The sidebar widget will automatically update according to the order (packing) and items within the given GtkStack.

Parameters

sidebar

a XAppStackSidebar

 

stack

a GtkStack

 

xapp_stack_sidebar_get_stack ()

GtkStack *
xapp_stack_sidebar_get_stack (XAppStackSidebar *sidebar);

Retrieves the stack. See xapp_stack_sidebar_set_stack().

Parameters

sidebar

a XAppStackSidebar

 

Returns

the associated GtkStack or NULL if none has been set explicitly.

[nullable][transfer none]

Types and Values

XAPP_TYPE_STACK_SIDEBAR

#define XAPP_TYPE_STACK_SIDEBAR (xapp_stack_sidebar_get_type ())

XAppStackSidebar

typedef struct _XAppStackSidebar XAppStackSidebar;

Property Details

The “stack” property

  “stack”                    GtkStack *

Associated stack for this XAppStackSidebar.

Owner: XAppStackSidebar

Flags: Read / Write

xapp-2.8.8/docs/reference/XAppDarkModeManager.html0000664000175000017500000001427714736763051021002 0ustar fabiofabio XAppDarkModeManager: XApp Reference Manual

XAppDarkModeManager

XAppDarkModeManager — Manages an application's dark mode preference for it.

Types and Values

Object Hierarchy

    GObject
    ╰── XAppDarkModeManager

Description

This class will attempt to use the XDG Desktop Settings portal to manage its 'gtk-application-prefer-dark-theme' setting. If the portal is unavailable it will resort to using xdg-desktop-portal-xapp's dconf setting.

Since 2.6

Functions

xapp_dark_mode_manager_new ()

XAppDarkModeManager *
xapp_dark_mode_manager_new (gboolean prefer_dark_mode);

Parameters

prefer_dark_mode

The application's preference.

 

Returns

a new XAppDarkModeManager instance. Free with g_object_unref.

[transfer full]

Since: 2.6

Types and Values

XAPP_TYPE_DARK_MODE_MANAGER

#define XAPP_TYPE_DARK_MODE_MANAGER (xapp_dark_mode_manager_get_type ())

XAppDarkModeManager

typedef struct _XAppDarkModeManager XAppDarkModeManager;
xapp-2.8.8/docs/reference/left-insensitive.png0000664000175000017500000000051614736763051020327 0ustar fabiofabioPNG  IHDR(-S~PLTEe 1f$j(i 0h2*ip+hHpkH! v:adJIENDB`xapp-2.8.8/docs/reference/XAppPreferencesWindow.html0000664000175000017500000003352614736763051021450 0ustar fabiofabio XAppPreferencesWindow: XApp Reference Manual

XAppPreferencesWindow

XAppPreferencesWindow — A base preferences window

Signals

void close Action

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ╰── GtkBin
                    ╰── GtkWindow
                        ╰── XAppPreferencesWindow

Implemented Interfaces

XAppPreferencesWindow implements AtkImplementorIface and GtkBuildable.

Description

The XAppPreferencesWindow sets up a simple dialog window with a GtkStack, GtkSidebarSwitcher, and GtkActionBar. The stack switcher and action bar only show when needed.

Functions

xapp_preferences_window_new ()

XAppPreferencesWindow *
xapp_preferences_window_new (void);

Creates a new XAppPreferencesWindow.

Returns

a newly created XAppPreferencesWindow


xapp_preferences_window_add_page ()

void
xapp_preferences_window_add_page (XAppPreferencesWindow *window,
                                  GtkWidget *widget,
                                  const gchar *name,
                                  const gchar *title);

Adds a page to the window. The page is identified by name. The title will be used in the sidebar so should be short. The sidebar will show automatically once at least two pages are added.

Parameters

window

a XAppPreferencesWindow

 

widget

a GtkWidget to add

 

name

the name for the page

 

title

a human-readable title for the page

 

xapp_preferences_window_add_button ()

void
xapp_preferences_window_add_button (XAppPreferencesWindow *window,
                                    GtkWidget *button,
                                    GtkPackType pack_type);

Adds a button to the bottom action bar of the window. Where the button is place will be determined by the GtkPackType. The action bar will show automatically once at least one button is added.

Parameters

window

a XAppPreferencesWindow

 

button

a GtkWidget to add

 

pack_type

a GtkPackType to use

 

Types and Values

XAPP_TYPE_PREFERENCES_WINDOW

#define XAPP_TYPE_PREFERENCES_WINDOW (xapp_preferences_window_get_type ())

struct XAppPreferencesWindowClass

struct XAppPreferencesWindowClass {
    GtkWindowClass parent_class;

    /* Keybinding signals */
    void (* close) (XAppPreferencesWindow *window);
};

XAppPreferencesWindow

typedef struct _XAppPreferencesWindow XAppPreferencesWindow;

Signal Details

The “close” signal

void
user_function (XAppPreferencesWindow *xapppreferenceswindow,
               gpointer               user_data)

Flags: Action

xapp-2.8.8/docs/reference/XAppStatusIcon.html0000664000175000017500000017615014736763051020114 0ustar fabiofabio XAppStatusIcon: XApp Reference Manual

XAppStatusIcon

XAppStatusIcon — Broadcasts status information over DBUS

Properties

int icon-size Read / Write
char * name Read / Write / Construct
GtkWidget * primary-menu Read / Write
GtkWidget * secondary-menu Read / Write

Object Hierarchy

    GEnum
    ├── XAppScrollDirection
    ╰── XAppStatusIconState
    GObject
    ╰── XAppStatusIcon

Description

The XAppStatusIcon allows applications to share status info about themselves. It replaces the obsolete and very similar Gtk.StatusIcon widget.

If used in an environment where no applet is handling XAppStatusIcons, the XAppStatusIcon delegates its calls to a Gtk.StatusIcon.

Functions

xapp_status_icon_new ()

XAppStatusIcon *
xapp_status_icon_new (void);

Creates a new XAppStatusIcon instance

Returns

a new XAppStatusIcon. Use g_object_unref when finished.

[transfer full]

Since: 1.6


xapp_status_icon_new_with_name ()

XAppStatusIcon *
xapp_status_icon_new_with_name (const gchar *name);

Creates a new XAppStatusIcon instance and sets its name to name.

Returns

a new XAppStatusIcon. Use g_object_unref when finished.

[transfer full]

Since: 1.6


xapp_status_icon_set_name ()

void
xapp_status_icon_set_name (XAppStatusIcon *icon,
                           const gchar *name);

Sets the status icon name. This is not shown to users.

Parameters

icon

a XAppStatusIcon

 

name

a name (this defaults to the name of the application, if not set)

 

Since: 1.6


xapp_status_icon_set_icon_name ()

void
xapp_status_icon_set_icon_name (XAppStatusIcon *icon,
                                const gchar *icon_name);

Sets the icon name or local path to use.

Parameters

icon

a XAppStatusIcon

 

icon_name

An icon name or absolute path to an icon.

 

Since: 1.6


xapp_status_icon_get_icon_size ()

gint
xapp_status_icon_get_icon_size (XAppStatusIcon *icon);

Parameters

icon

a XAppStatusIcon

 

Returns

The desired icon size - usually set by the host based on panel size. This is not what it's guaranteed to get, and this is really only useful when receiving absolute icon paths from the client app.

Since: 1.8


xapp_status_icon_set_tooltip_text ()

void
xapp_status_icon_set_tooltip_text (XAppStatusIcon *icon,
                                   const gchar *tooltip_text);

Sets the tooltip text

Parameters

icon

a XAppStatusIcon

 

tooltip_text

the text to show in the tooltip

 

Since: 1.6


xapp_status_icon_set_label ()

void
xapp_status_icon_set_label (XAppStatusIcon *icon,
                            const gchar *label);

Sets a label, shown beside the icon

Parameters

icon

a XAppStatusIcon

 

label

some text

 

Since: 1.6


xapp_status_icon_set_visible ()

void
xapp_status_icon_set_visible (XAppStatusIcon *icon,
                              const gboolean visible);

Sets the visibility of the status icon

Parameters

icon

a XAppStatusIcon

 

visible

whether or not the status icon should be visible

 

Since: 1.6


xapp_status_icon_get_visible ()

gboolean
xapp_status_icon_get_visible (XAppStatusIcon *icon);

Returns whether or not the icon should currently be visible.

Parameters

icon

an XAppStatusIcon

 

Returns

the current visibility state.

Since: 1.8.5


xapp_status_icon_popup_menu ()

void
xapp_status_icon_popup_menu (XAppStatusIcon *icon,
                             GtkMenu *menu,
                             gint x,
                             gint y,
                             guint button,
                             guint _time,
                             gint panel_position);

Pop up menu using the positioning arguments. These arguments should be those provided by a “button-release-event”.

Parameters

icon

an XAppStatusIcon

 

menu

A GtkMenu to display when the primary mouse button is released.

[nullable]

x

The x anchor position for the menu.

 

y

The y anchor position for the menu.

 

button

The button used to initiate this action (or 0)

 

_time

The event time (or 0)

 

panel_position

The GtkPositionType for the position of the icon.

 

Since: 1.8.6


xapp_status_icon_set_primary_menu ()

void
xapp_status_icon_set_primary_menu (XAppStatusIcon *icon,
                                   GtkMenu *menu);

See the “primary-menu” property for details

Parameters

icon

an XAppStatusIcon

 

menu

A GtkMenu to display when the primary mouse button is released.

[nullable]

Since: 1.6


xapp_status_icon_get_primary_menu ()

GtkWidget *
xapp_status_icon_get_primary_menu (XAppStatusIcon *icon);

Returns a pointer to a GtkMenu that was set previously for the primary mouse button. If no menu was set, this returns NULL.

Parameters

icon

an XAppStatusIcon

 

Returns

the GtkMenu or NULL if none was set.

[transfer none]

Since: 1.6


xapp_status_icon_set_secondary_menu ()

void
xapp_status_icon_set_secondary_menu (XAppStatusIcon *icon,
                                     GtkMenu *menu);

See the “secondary-menu” property for details

Parameters

icon

an XAppStatusIcon

 

menu

A GtkMenu to display when the primary mouse button is released.

[nullable]

Since: 1.6


xapp_status_icon_get_secondary_menu ()

GtkWidget *
xapp_status_icon_get_secondary_menu (XAppStatusIcon *icon);

Returns a pointer to a GtkMenu that was set previously for the secondary mouse button. If no menu was set, this returns NULL.

Parameters

icon

an XAppStatusIcon

 

Returns

the GtkMenu or NULL if none was set.

[transfer none]

Since: 1.6


xapp_status_icon_get_state ()

XAppStatusIconState
xapp_status_icon_get_state (XAppStatusIcon *icon);

Gets the current XAppStatusIconState of icon. The state is determined by whether the icon is being displayed by an XAppStatusMonitor client, a fallback tray icon, or not being displayed at all.

See XAppStatusIconState for more details.

Parameters

icon

an XAppStatusIcon

 

Returns

the icon's state.

Since: 1.6


xapp_status_icon_set_metadata ()

void
xapp_status_icon_set_metadata (XAppStatusIcon *icon,
                               const gchar *metadata);

Sets metadata to pass to the icon proxy for an applet's use. Right now this is only so xapp-sn-watcher can tell the applets when the icon is originating from appindicator so panel button 'highlighting' can behave correctly.

Parameters

icon

an XAppStatusIcon

 

metadata

A json-formatted string of key:values.

[nullable]

Since: 1.8.7


xapp_status_icon_any_monitors ()

gboolean
xapp_status_icon_any_monitors (void);

Looks for the existence of any active XAppStatusIconMonitors on the bus.

Returns

TRUE if at least one monitor was found.

Since: 1.6

Types and Values

XAPP_TYPE_STATUS_ICON

#define XAPP_TYPE_STATUS_ICON            (xapp_status_icon_get_type ())

enum XAppStatusIconState

Members

XAPP_STATUS_ICON_STATE_NATIVE

The XAppStatusIcon is currently being handled by an XAppStatusIconMonitor (usually in an applet).

 

XAPP_STATUS_ICON_STATE_FALLBACK

The XAppStatusIcon is currently being handled by a legacy system tray implementation (using GtkStatusIcon).

 

XAPP_STATUS_ICON_STATE_NO_SUPPORT

The XAppStatusIcon is not currently being handled by any kind of status icon implementation.

 

enum XAppScrollDirection

Represents the direction of icon scroll events.

Members

XAPP_SCROLL_UP

Scroll theoretical content up.

 

XAPP_SCROLL_DOWN

Scroll theoretical content down.

 

XAPP_SCROLL_LEFT

Scroll theoretical content left.

 

XAPP_SCROLL_RIGHT

Scroll theoretical content right.

 

XAppStatusIcon

typedef struct _XAppStatusIcon XAppStatusIcon;

Property Details

The “icon-size” property

  “icon-size”                int

The icon size that is preferred by icon monitor/host - this is usually a product of some calculation based on the panel size. It can be used by the client to size an icon to be saved as a file and its path sent to the host.

If this value is 0 it has not been set, and its value can be unreliable if the host has multiple XAppStatusIconMonitors active.

Owner: XAppStatusIcon

Flags: Read / Write

Allowed values: [0,96]

Default value: 0


The “name” property

  “name”                     char *

The name of the icon for sorting purposes. If this is in the form of 'org.x.StatusIcon.foo` and set immediately upon creation of the icon, it will also attempt to own this dbus name; this can be useful in sandboxed environments where a well-defined name is required. If additional icons are created, only the name given to the initial one will be used for dbus, though different names can still affect the sort order. This is set to the value of g_get_prgname() if no other name is provided.

Owner: XAppStatusIcon

Flags: Read / Write / Construct

Default value: NULL


The “primary-menu” property

  “primary-menu”             GtkWidget *

A GtkMenu to use when requested by the remote monitor via a left (or primary) click.

When this property is not NULL, the menu will be automatically positioned and displayed during a primary button release.

When this property IS NULL, the “activate” will be sent for primary button presses.

In both cases, the “button-press-event” and “button-release-events” will be fired like normal.

Setting this will remove any floating reference to the menu and assume ownership. As a result, it is not necessary to maintain a reference to it in the parent application (or unref it when finished with it - if you wish to replace the menu, simply call this method again with a new menu.

The same GtkMenu widget can be set as both the primary and secondary.

Owner: XAppStatusIcon

Flags: Read / Write


The “secondary-menu” property

  “secondary-menu”           GtkWidget *

A GtkMenu to use when requested by the remote monitor via a right (or secondary) click.

When this property is not NULL, the menu will be automatically positioned and displayed during a secondary button release.

When this property IS NULL, the “activate” will be sent for secondary button presses.

In both cases, the “button-press-event” and “button-release-events” will be fired like normal.

Setting this will remove any floating reference to the menu and assume ownership. As a result, it is not necessary to maintain a reference to it in the parent application (or unref it when finished with it - if you wish to replace the menu, simply call this method again with a new menu.

The same GtkMenu widget can be set as both the primary and secondary.

Owner: XAppStatusIcon

Flags: Read / Write

Signal Details

The “activate” signal

void
user_function (XAppStatusIcon *icon,
               guint           button,
               guint           time,
               gpointer        user_data)

Gets emitted when the user activates the status icon. If the XAppStatusIcon:primary-menu or XAppStatusIcon:secondary-menu is not NULL, this signal is skipped for the respective button presses. A middle button click will always send this signal when pressed.

Parameters

icon

The XAppStatusIcon

 

button

The button that was pressed

 

time

The time supplied by the event, or 0

 

user_data

user data set when the signal handler was connected.

 

Flags: Action


The “button-press-event” signal

void
user_function (XAppStatusIcon *icon,
               int             x,
               int             y,
               guint           button,
               guint           time,
               int             panel_position,
               gpointer        user_data)

Gets emitted when there is a button press received from an applet

Parameters

icon

The XAppStatusIcon

 

x

The absolute x position to use for menu positioning

 

y

The absolute y position to use for menu positioning

 

button

The button that was pressed

 

time

The time supplied by the event, or 0

 

panel_position

The GtkPositionType to use for menu positioning

 

user_data

user data set when the signal handler was connected.

 

Flags: Action


The “button-release-event” signal

void
user_function (XAppStatusIcon *icon,
               int             x,
               int             y,
               guint           button,
               guint           time,
               int             panel_position,
               gpointer        user_data)

Gets emitted when there is a button release received from an applet

Parameters

icon

The XAppStatusIcon

 

x

The absolute x position to use for menu positioning

 

y

The absolute y position to use for menu positioning

 

button

The button that was released

 

time

The time supplied by the event, or 0

 

panel_position

The GtkPositionType to use for menu positioning

 

user_data

user data set when the signal handler was connected.

 

Flags: Action


The “scroll-event” signal

void
user_function (XAppStatusIcon     *icon,
               int                 amount,
               XAppScrollDirection direction,
               guint               time,
               gpointer            user_data)

Gets emitted when the user uses the mouse scroll wheel over the status icon. For the most part, amounts will always be 1, unless an applet supports smooth scrolling. Generally the direction value is most important.

Parameters

icon

The XAppStatusIcon

 

amount

The amount of movement for the scroll event

 

direction

the XAppScrollDirection of the scroll event

 

time

The time supplied by the event, or 0

 

user_data

user data set when the signal handler was connected.

 

Flags: Action


The “state-changed” signal

void
user_function (XAppStatusIcon     *icon,
               XAppStatusIconState new_state,
               gpointer            user_data)

Gets emitted when the state of the icon changes. If you wish to react to changes in how the status icon is being handled (perhaps to alter the menu or other click behavior), you should connect to this - see XAppStatusIconState for more details.

Parameters

icon

The XAppStatusIcon

 

new_state

The new XAppStatusIconState of the icon

 

user_data

user data set when the signal handler was connected.

 

Flags: Action

xapp-2.8.8/docs/reference/ch01.html0000664000175000017500000001050514736763051015751 0ustar fabiofabio API reference: XApp Reference Manual

API reference

XAppDarkModeManager — Manages an application's dark mode preference for it.
XAppFavorites — Keeps track of favorite files.
XAppGtkWindow — A subclass of GtkWindow that allows additional communication with the window manager.
XAppGpuOffloadHelper — Simple interface for Switcheroo.
XAppIconChooserButton — A button for selecting an icon
XAppIconChooserDialog — A dialog for selecting an icon
XAppKbdLayoutController — Keyboard layout selection UI element provider.
XAppMonitorBlanker — Blank and unblank unused monitors
XAppPreferencesWindow — A base preferences window
XAppStackSidebar — An automatic sidebar widget
XAppStatusIcon — Broadcasts status information over DBUS
XAppStatusIconMonitor — Looks for XAppStatusIcons on DBUS and communicates info to an applet to represent the icons.
XAppObjectManagerClient
xapp-util
XAppVisibilityGroup — Groups widgets to have their visibility or sensitivity controlled as a group, independent of their positions in any widget hierarchy.
xapp-2.8.8/docs/reference/object-tree.html0000664000175000017500000001752114736763051017426 0ustar fabiofabio Object Hierarchy: XApp Reference Manual

Object Hierarchy

    GObject
    ├── XAppDarkModeManager
    ├── XAppFavorites
    ├── XAppGpuOffloadHelper
    ├── GInitiallyUnowned
       ╰── GtkWidget
           ╰── GtkContainer
               ╰── GtkBin
                   ├── GtkWindow
                      ├── XAppGtkWindow
                         ╰── XAppIconChooserDialog
                      ╰── XAppPreferencesWindow
                   ├── GtkButton
                      ╰── XAppIconChooserButton
                   ╰── XAppStackSidebar
    ├── XAppKbdLayoutController
    ├── XAppMonitorBlanker
    ├── GDBusObjectManagerClient
       ╰── XAppObjectManagerClient
    ├── GDBusObjectProxy
       ╰── XAppObjectProxy
    ├── GDBusObjectSkeleton
       ╰── XAppObjectSkeleton
    ├── XAppStatusIcon
    ├── GDBusProxy
       ├── XAppStatusIconInterfaceProxy
       ╰── XAppSwitcherooControlProxy
    ├── GDBusInterfaceSkeleton
       ├── XAppStatusIconInterfaceSkeleton
       ╰── XAppSwitcherooControlSkeleton
    ├── XAppStatusIconMonitor
    ╰── XAppStyleManager
    GInterface
    ├── XAppObject
    ├── XAppStatusIconInterface
    ╰── XAppSwitcherooControl
    GBoxed
    ├── XAppFavoriteInfo
    ├── XAppGpuInfo
    ╰── XAppVisibilityGroup
    GEnum
    ├── XAppIconSize
    ├── XAppScrollDirection
    ╰── XAppStatusIconState
xapp-2.8.8/docs/reference/up.png0000664000175000017500000000027214736763051015462 0ustar fabiofabioPNG  IHDRaIDATx0 `7#t:HPw(.QG)Dc2z}xa< 1_M!F(ZU c !,po-i $u{ 6VCī"Z7̵*׎IENDB`xapp-2.8.8/docs/reference/XAppKbdLayoutController.html0000664000175000017500000012031514736763051021752 0ustar fabiofabio XAppKbdLayoutController: XApp Reference Manual

XAppKbdLayoutController

XAppKbdLayoutController — Keyboard layout selection UI element provider.

Properties

Object Hierarchy

    GObject
    ╰── XAppKbdLayoutController

Description

A GObject wrapper for Gkbd that provides additional UI element support for keyboard layout flags and abbreviations, as well as Wfacilities to distinguish regional and hardware-based variants which might otherwise appear identical in a layout list.

Functions

xapp_kbd_layout_controller_new ()

XAppKbdLayoutController *
xapp_kbd_layout_controller_new (void);

Creates a new XAppKbdLayoutController instance.

Returns

a new XAppKbdLayoutController instance.

[transfer full]


xapp_kbd_layout_controller_get_enabled ()

gboolean
xapp_kbd_layout_controller_get_enabled
                               (XAppKbdLayoutController *controller);

Returns whether or not the layout controller is enabled

Parameters

controller

the XAppKbdLayoutController

 

xapp_kbd_layout_controller_get_current_group ()

guint
xapp_kbd_layout_controller_get_current_group
                               (XAppKbdLayoutController *controller);

Selects the previous group in the group list.

Parameters

controller

the XAppKbdLayoutController

 

xapp_kbd_layout_controller_set_current_group ()

void
xapp_kbd_layout_controller_set_current_group
                               (XAppKbdLayoutController *controller,
                                guint group);

Selects the given group number as active.

Parameters

controller

the XAppKbdLayoutController

 

group

the group number to make active

 

xapp_kbd_layout_controller_next_group ()

void
xapp_kbd_layout_controller_next_group (XAppKbdLayoutController *controller);

Selects the next group in the group list.

Parameters

controller

the XAppKbdLayoutController

 

xapp_kbd_layout_controller_previous_group ()

void
xapp_kbd_layout_controller_previous_group
                               (XAppKbdLayoutController *controller);

Selects the previous group in the group list.

Parameters

controller

the XAppKbdLayoutController

 

xapp_kbd_layout_controller_get_current_name ()

gchar *
xapp_kbd_layout_controller_get_current_name
                               (XAppKbdLayoutController *controller);

Returns the full name of the current keyboard layout.

Parameters

controller

the XAppKbdLayoutController

 

Returns

the newly created string or NULL if something went wrong.

[transfer full]


xapp_kbd_layout_controller_get_all_names ()

gchar **
xapp_kbd_layout_controller_get_all_names
                               (XAppKbdLayoutController *controller);

Returns an array of all full layout names

Parameters

controller

the XAppKbdLayoutController

 

Returns

array of names.

[transfer none][array zero-terminated=1]


xapp_kbd_layout_controller_get_current_icon_name ()

gchar *
xapp_kbd_layout_controller_get_current_icon_name
                               (XAppKbdLayoutController *controller);

Returns the icon file name (no path or extension) to use for the current layout

Parameters

controller

the XAppKbdLayoutController

 

Returns

a new string with the icon name.

[transfer full]


xapp_kbd_layout_controller_get_icon_name_for_group ()

gchar *
xapp_kbd_layout_controller_get_icon_name_for_group
                               (XAppKbdLayoutController *controller,
                                guint group);

Returns the icon file name (no path or extension) to use for the specified layout.

Parameters

controller

the XAppKbdLayoutController

 

group

a group number

 

Returns

a new string with the icon name.

[transfer full]


xapp_kbd_layout_controller_get_current_flag_id ()

gint
xapp_kbd_layout_controller_get_current_flag_id
                               (XAppKbdLayoutController *controller);

Returns the duplicate id for the current layout

Parameters

controller

the XAppKbdLayoutController

 

Returns

the id


xapp_kbd_layout_controller_get_flag_id_for_group ()

gint
xapp_kbd_layout_controller_get_flag_id_for_group
                               (XAppKbdLayoutController *controller,
                                guint group);

xapp_kbd_layout_controller_get_current_short_group_label ()

gchar *
xapp_kbd_layout_controller_get_current_short_group_label
                               (XAppKbdLayoutController *controller);

Returns the short group label (and subscript, if any) of the current layout

Parameters

controller

the XAppKbdLayoutController

 

Returns

a new string or NULL.

[transfer full]


xapp_kbd_layout_controller_get_short_group_label_for_group ()

gchar *
xapp_kbd_layout_controller_get_short_group_label_for_group
                               (XAppKbdLayoutController *controller,
                                guint group);

Returns the short group label and subscript of the specified layout.

Parameters

controller

the XAppKbdLayoutController

 

group

a group number

 

Returns

a new string or NULL.

[transfer full]


xapp_kbd_layout_controller_get_current_variant_label ()

gchar *
xapp_kbd_layout_controller_get_current_variant_label
                               (XAppKbdLayoutController *controller);

Returns the variant label (and subscript, if any) of the current layout

Parameters

controller

the XAppKbdLayoutController

 

Returns

a new string or NULL.

[transfer full]


xapp_kbd_layout_controller_get_variant_label_for_group ()

gchar *
xapp_kbd_layout_controller_get_variant_label_for_group
                               (XAppKbdLayoutController *controller,
                                guint group);

Returns the variant label and subscript of the specified layout.

Parameters

controller

the XAppKbdLayoutController

 

group

a group number

 

Returns

a new string or NULL.

[transfer full]


xapp_kbd_layout_controller_render_cairo_subscript ()

void
xapp_kbd_layout_controller_render_cairo_subscript
                               (cairo_t *cr,
                                gdouble x,
                                gdouble y,
                                gdouble width,
                                gdouble height,
                                gint subscript);

Renders a subscript number in the given work area. This should be called from within a "draw" or "paint" widget/actor function, where a valid cairo_t is provided to draw with.

Parameters

cr

a cairo_t

 

x

the x position of the drawing area

 

y

the y position of the drawing area

 

width

the width of the drawing area

 

height

the height of the drawing area

 

subscript

the number to render

 

Property Details

The “enabled” property

  “enabled”                  gboolean

Whether we're enabled (more than one keyboard layout is installed).

Owner: XAppKbdLayoutController

Flags: Read

Default value: FALSE

Signal Details

The “config-changed” signal

void
user_function (XAppKbdLayoutController *xappkbdlayoutcontroller,
               gpointer                 user_data)

Flags: Run Last


The “layout-changed” signal

void
user_function (XAppKbdLayoutController *xappkbdlayoutcontroller,
               guint                    arg1,
               gpointer                 user_data)

Flags: Run Last

xapp-2.8.8/docs/reference/XAppMonitorBlanker.html0000664000175000017500000002613614736763051020744 0ustar fabiofabio XAppMonitorBlanker: XApp Reference Manual

XAppMonitorBlanker

XAppMonitorBlanker — Blank and unblank unused monitors

Types and Values

Object Hierarchy

    GObject
    ╰── XAppMonitorBlanker

Description

The XAppMonitorBlanker widget that creates one or more POPUP type GtkWindows that are used to blank unused monitors in multiple monitor setups.

Functions

xapp_monitor_blanker_new ()

XAppMonitorBlanker *
xapp_monitor_blanker_new (void);

Creates a new XAppMonitorBlanker.

Returns

a newly created XAppMonitorBlanker


xapp_monitor_blanker_blank_other_monitors ()

void
xapp_monitor_blanker_blank_other_monitors
                               (XAppMonitorBlanker *self,
                                GtkWindow *window);

Blanks monitors besides the one where the window is.

Parameters

self

a XAppMonitorBlanker

 

window

a GtkWindow

 

xapp_monitor_blanker_unblank_monitors ()

void
xapp_monitor_blanker_unblank_monitors (XAppMonitorBlanker *self);

Unblanks monitors that were blanked by xapp_monitor_blanker_blank_other_monitors();

Parameters

self

a XAppMonitorBlanker

 

xapp_monitor_blanker_are_monitors_blanked ()

gboolean
xapp_monitor_blanker_are_monitors_blanked
                               (XAppMonitorBlanker *self);

Returns whether monitors are currently blanked. See xapp_monitor_blanker_blank_other_monitors().

Parameters

self

a XAppMonitorBlanker

 

Returns

TRUE if monitors are blanked.

Types and Values

XAPP_TYPE_MONITOR_BLANKER

#define XAPP_TYPE_MONITOR_BLANKER (xapp_monitor_blanker_get_type ())

XAppMonitorBlanker

typedef struct _XAppMonitorBlanker XAppMonitorBlanker;
xapp-2.8.8/docs/reference/home.png0000664000175000017500000000025114736763051015763 0ustar fabiofabioPNG  IHDRapIDATxc@*o NbfbY9h&ӨěA @;\a gȀs A2{4E |0: `p%a;(ft6YIENDB`xapp-2.8.8/docs/reference/up-insensitive.png0000664000175000017500000000044014736763051020015 0ustar fabiofabioPNG  IHDR(-S`PLTEÿ[g&tRNS !1EMinoM3PIDATxڭJD1g,GԱ-5wn G7'30"vET!&~_b?rgԣ>1vIENDB`xapp-2.8.8/docs/reference/XAppStatusIconMonitor.html0000664000175000017500000003440414736763051021457 0ustar fabiofabio XAppStatusIconMonitor: XApp Reference Manual

XAppStatusIconMonitor

XAppStatusIconMonitor — Looks for XAppStatusIcons on DBUS and communicates info to an applet to represent the icons.

Signals

Object Hierarchy

    GObject
    ╰── XAppStatusIconMonitor

Description

The XAppStatusIconMonitor is intended to be utilized by some status applet to display info about an app.

The simplest way to use is to make a new instance of this monitor, and connect to the “icon-added” and “icon-removed” signals. The received object for both of these signals is an XAppStatusIconInterfaceProxy. It represents an application's XAppStatusIcon, and has properties available for describing the icon name, tooltip, label and visibility.

The proxy also provides methods to handle clicks, which can be called by the applet, to request that the app display its menu.

Functions

xapp_status_icon_monitor_new ()

XAppStatusIconMonitor *
xapp_status_icon_monitor_new (void);

Creates a new monitor.

Returns

a new XAppStatusIconMonitor. Use g_object_unref when finished.

[transfer full]

Since: 1.6


xapp_status_icon_monitor_list_icons ()

GList *
xapp_status_icon_monitor_list_icons (XAppStatusIconMonitor *monitor);

List known icon proxies.

Parameters

monitor

a XAppStatusIconMonitor

 

Returns

a GList of icons.

[element-type XAppStatusIconMonitor][transfer container]

Since: 1.6

Types and Values

XAPP_TYPE_STATUS_ICON_MONITOR

#define XAPP_TYPE_STATUS_ICON_MONITOR   (xapp_status_icon_monitor_get_type ())

XAppStatusIconMonitor

typedef struct _XAppStatusIconMonitor XAppStatusIconMonitor;

Signal Details

The “icon-added” signal

void
user_function (XAppStatusIconMonitor        *monitor,
               XAppStatusIconInterfaceProxy *proxy,
               gpointer                      user_data)

This signal is emitted by the monitor when it has discovered a new XAppStatusIcon on the bus.

Parameters

monitor

the XAppStatusIconMonitor

 

proxy

the interface proxy for the XAppStatusIcon that has been added.

 

user_data

user data set when the signal handler was connected.

 

Flags: Action


The “icon-removed” signal

void
user_function (XAppStatusIconMonitor        *monitor,
               XAppStatusIconInterfaceProxy *proxy,
               gpointer                      user_data)

This signal is emitted by the monitor when an XAppStatusIcon has disappeared from the bus.

Parameters

monitor

the XAppStatusIconMonitor

 

proxy

the XAppStatusIcon proxy that has been removed.

 

user_data

user data set when the signal handler was connected.

 

Flags: Action

xapp-2.8.8/docs/reference/XAppIconChooserButton.html0000664000175000017500000005441414736763051021425 0ustar fabiofabio XAppIconChooserButton: XApp Reference Manual

XAppIconChooserButton

XAppIconChooserButton — A button for selecting an icon

Properties

char * category Read / Write
char * icon Read / Write
GtkIconSize icon-size Read / Write

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ╰── GtkBin
                    ╰── GtkButton
                        ╰── XAppIconChooserButton

Implemented Interfaces

XAppIconChooserButton implements AtkImplementorIface, GtkBuildable, GtkActionable and GtkActivatable.

Description

The XAppIconChooserButton creates a button so that the user can select an icon. When the button is clicked it will open an XAppIconChooserDialog. The currently selected icon will be displayed as the button image.

Functions

xapp_icon_chooser_button_new ()

XAppIconChooserButton *
xapp_icon_chooser_button_new (void);

Creates a new XAppIconChooserButton and sets its icon to icon .

Returns

a newly created XAppIconChooserButton


xapp_icon_chooser_button_new_with_size ()

XAppIconChooserButton *
xapp_icon_chooser_button_new_with_size
                               (GtkIconSize icon_size);

Creates a new XAppIconChooserButton, and sets the sizes of the button image and the icons in the dialog. Note that xapp_icon_chooser_button_new_with_size (NULL, NULL) is the same as calling xapp_icon_chooser_button_new().

Parameters

icon_size

the size of icon to use in the button, or NULL to use the default value.

 

Returns

a newly created XAppIconChooserButton


xapp_icon_chooser_button_set_icon_size ()

void
xapp_icon_chooser_button_set_icon_size
                               (XAppIconChooserButton *button,
                                GtkIconSize icon_size);

Sets the icon size used in the button.

Parameters

button

a XAppIconChooserButton

 

icon_size

the size of icon to use in the button, or -1 to use the default value.

 

xapp_icon_chooser_button_set_icon ()

void
xapp_icon_chooser_button_set_icon (XAppIconChooserButton *button,
                                   const gchar *icon);

Sets the icon on the XAppIconChooserButton.

Parameters

button

a XAppIconChooserButton

 

icon

a string representing the icon to be set. This may be an icon name or a file path.

[nullable]

xapp_icon_chooser_button_set_default_category ()

void
xapp_icon_chooser_button_set_default_category
                               (XAppIconChooserButton *button,
                                const gchar *category);

Sets the icon on the XAppIconChooserButton.

Parameters

button

a XAppIconChooserButton

 

category

a string representing the category selected by default.

[nullable]

xapp_icon_chooser_button_get_icon ()

const gchar *
xapp_icon_chooser_button_get_icon (XAppIconChooserButton *button);

Gets the icon from the XAppIconChooserButton.

Parameters

button

a XAppIconChooserButton

 

Returns

a string representing the icon. This may be an icon name or a file path.


xapp_icon_chooser_button_get_dialog ()

XAppIconChooserDialog *
xapp_icon_chooser_button_get_dialog (XAppIconChooserButton *button);

Gets a reference to the icon chooser dialog for the XAppIconChooserButton. This is useful for setting properties on the dialog.

Parameters

button

a XAppIconChooserButton

 

Returns

the XAppIconChooserDialog.

[transfer none]

Types and Values

XAPP_TYPE_ICON_CHOOSER_BUTTON

#define XAPP_TYPE_ICON_CHOOSER_BUTTON   (xapp_icon_chooser_button_get_type ())

XAppIconChooserButton

typedef struct _XAppIconChooserButton XAppIconChooserButton;

Property Details

The “category” property

  “category”                 char *

The category selected by default.

Owner: XAppIconChooserButton

Flags: Read / Write

Default value: ""


The “icon” property

  “icon”                     char *

The preferred size to use when looking up icons. This only works with icon names. Additionally, there is no guarantee that a selected icon name will exist in a particular size.

Owner: XAppIconChooserButton

Flags: Read / Write

Default value: ""


The “icon-size” property

  “icon-size”                GtkIconSize

The size to use when displaying the icon.

Owner: XAppIconChooserButton

Flags: Read / Write

Default value: GTK_ICON_SIZE_DND

xapp-2.8.8/docs/reference/annotation-glossary.html0000664000175000017500000001065414736763051021236 0ustar fabiofabio Annotation Glossary: XApp Reference Manual

Annotation Glossary

A

array

Parameter points to an array of items.

C

closure

This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.

E

element-type

Generics and defining elements of containers and arrays.

N

not nullable

NULL must not be passed as the value in, out, in-out; or as a return value.

nullable

NULL may be passed as the value in, out, in-out; or as a return value.

S

scope notified

The callback is valid until the GDestroyNotify argument is called.

skip

Exposed in C code, not necessarily available in other languages.

T

transfer container

The caller owns the data container, but not the data inside it.

transfer full

The caller owns the data, and is responsible for free it.

transfer none

The data is owned by the callee, which is responsible of freeing it.

type

Override the parsed C type with given type.

xapp-2.8.8/docs/reference/XAppIconChooserDialog.html0000664000175000017500000010155014736763051021343 0ustar fabiofabio XAppIconChooserDialog: XApp Reference Manual

XAppIconChooserDialog

XAppIconChooserDialog — A dialog for selecting an icon

Properties

gboolean allow-paths Read / Write
char * default-icon Read / Write
XAppIconSize icon-size Read / Write

Signals

Object Hierarchy

    GEnum
    ╰── XAppIconSize
    GObject
    ╰── GInitiallyUnowned
        ╰── GtkWidget
            ╰── GtkContainer
                ╰── GtkBin
                    ╰── GtkWindow
                        ╰── XAppGtkWindow
                            ╰── XAppIconChooserDialog

Implemented Interfaces

XAppIconChooserDialog implements AtkImplementorIface and GtkBuildable.

Description

The XAppIconChooserDialog creates a dialog so that the user can select an icon. It provides the ability to browse by category, search by icon name, or select from a specific file.

Functions

xapp_icon_chooser_dialog_new ()

XAppIconChooserDialog *
xapp_icon_chooser_dialog_new (void);

Creates a new XAppIconChooserDialog.

Returns

a newly created XAppIconChooserDialog


xapp_icon_chooser_dialog_run ()

gint
xapp_icon_chooser_dialog_run (XAppIconChooserDialog *dialog);

Shows the dialog and enters a separate main loop until an icon is chosen or the action is canceled.

xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and xapp_icon_chooser_dialog_run_with_category() may all be called multiple times. This is useful for applications which use this dialog multiple times, as it may improve performance for subsequent calls.

Parameters

dialog

a XAppIconChooserDialog

 

Returns

GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise


xapp_icon_chooser_dialog_run_with_icon ()

gint
xapp_icon_chooser_dialog_run_with_icon
                               (XAppIconChooserDialog *dialog,
                                gchar *icon);

Like xapp_icon_chooser_dialog_run but selects the icon specified by icon . This can be either an icon name or a path. Passing an icon string or path that doesn't exist is accepted, but it may show multiple results, or none at all. This behavior is useful if, for example, you wish to have the user select an image file from a particular directory.

If the property allow_paths is FALSE, setting a path will yield no results when the dialog is opened.

xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and xapp_icon_chooser_dialog_run_with_category() may all be called multiple times. This is useful for applications which use this dialog multiple times, as it may improve performance for subsequent calls.

Parameters

dialog

a XAppIconChooserDialog

 

icon

a string representing the icon that should be selected

 

Returns

GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise


xapp_icon_chooser_dialog_run_with_category ()

gint
xapp_icon_chooser_dialog_run_with_category
                               (XAppIconChooserDialog *dialog,
                                gchar *category);

Like xapp_icon_chooser_dialog_run but selects a particular category specified by category . This is used when there is a particular category of icon that is more appropriate than the others. If the category does not exist, the first category in the list will be selected. To get a list of possible categories, use gtk_icon_theme_list_contexts().

xapp_icon_chooser_dialog_run (), xapp_icon_chooser_dialog_run_with_icon(), and xapp_icon_chooser_dialog_run_with_category() may all be called multiple times. This is useful for applications which use this dialog multiple times, as it may improve performance for subsequent calls.

Parameters

dialog

a XAppIconChooserDialog

 

Returns

GTK_RESPONSE_OK if the user selected an icon, or GTK_RESPONSE_CANCEL otherwise


xapp_icon_chooser_dialog_get_icon_string ()

gchar *
xapp_icon_chooser_dialog_get_icon_string
                               (XAppIconChooserDialog *dialog);

Gets the currently selected icon from the dialog. If allow-paths is TRUE, this function may return either an icon name or a path depending on what the user selects. Otherwise it will only return an icon name.

Parameters

dialog

a XAppIconChooserDialog

 

Returns

the string representation of the currently selected icon or NULL if no icon is selected.

[transfer full]


xapp_icon_chooser_dialog_add_button ()

void
xapp_icon_chooser_dialog_add_button (XAppIconChooserDialog *dialog,
                                     GtkWidget *button,
                                     GtkPackType packing,
                                     GtkResponseType response_id);

Allows a button to be added to the GtkActionBar of the dialog with a custom response id.

Parameters

dialog

an XAppIconChooserDialog

 

button

a GtkButton to add

 

packing

the GtkPackType to specify start or end packing to the action bar

 

response_id

the dialog response id to return when this button is clicked.

 

xapp_icon_chooser_dialog_get_default_icon ()

gchar *
xapp_icon_chooser_dialog_get_default_icon
                               (XAppIconChooserDialog *dialog);

Returns the default icon (if set).

Returns

the default icon, or NULL if none is set.

[transfer full]


xapp_icon_chooser_dialog_set_default_icon ()

void
xapp_icon_chooser_dialog_set_default_icon
                               (XAppIconChooserDialog *dialog,
                                const gchar *icon);

Sets the default icon. If icon is not NULL, a button will be shown that will reset the dialog to it's default value.

Parameters

icon

the default icon, or NULL to unset

 

xapp_icon_chooser_dialog_add_custom_category ()

void
xapp_icon_chooser_dialog_add_custom_category
                               (XAppIconChooserDialog *dialog,
                                const gchar *name,
                                GList *icons);

Adds a custom category to the dialog.

Parameters

dialog

a XAppIconChooserDialog

 

name

the name of the category as it will be displayed in the category list

 

icons

a list of icon names to add to the new category.

[transfer full][element-type utf8]

Types and Values

XAPP_TYPE_ICON_CHOOSER_DIALOG

#define XAPP_TYPE_ICON_CHOOSER_DIALOG   (xapp_icon_chooser_dialog_get_type ())

enum XAppIconSize

Members

XAPP_ICON_SIZE_16

   

XAPP_ICON_SIZE_22

   

XAPP_ICON_SIZE_24

   

XAPP_ICON_SIZE_32

   

XAPP_ICON_SIZE_48

   

XAPP_ICON_SIZE_96

   

XAppIconChooserDialog

typedef struct _XAppIconChooserDialog XAppIconChooserDialog;

Property Details

The “allow-paths” property

  “allow-paths”              gboolean

Whether to allow paths to be searched and selected or only icon names.

Owner: XAppIconChooserDialog

Flags: Read / Write

Default value: TRUE


The “default-icon” property

  “default-icon”             char *

The icon to use by default.

Owner: XAppIconChooserDialog

Flags: Read / Write

Default value: NULL


The “icon-size” property

  “icon-size”                XAppIconSize

The preferred size to use when looking up icons. This only works with icon names. Additionally, there is no guarantee that a selected icon name will exist in a particular size.

Owner: XAppIconChooserDialog

Flags: Read / Write

Default value: XAPP_ICON_SIZE_32

Signal Details

The “close” signal

void
user_function (XAppIconChooserDialog *xappiconchooserdialog,
               gpointer               user_data)

Flags: Action


The “select” signal

void
user_function (XAppIconChooserDialog *xappiconchooserdialog,
               gpointer               user_data)

Flags: Action

xapp-2.8.8/docs/meson.build0000664000175000017500000000076614736763051014544 0ustar fabiofabiosubdir('xml') gnome.gtkdoc('libxapp', install: true, src_dir: [ join_paths(meson.project_source_root(), 'libxapp'), join_paths(meson.project_build_root(), 'libxapp'), ], dependencies: libxapp_dep, gobject_typesfile: 'libxapp.types', main_xml: 'xapp-docs.xml', scan_args: ['--rebuild-types'], mkdb_args: ['--xml-mode', '--output-format=xml'], ignore_headers: ['favorite-vfs-file.h', 'favorite-vfs-file-enumerator.h', 'favorite-vfs-file-monitor.h'] ) xapp-2.8.8/docs/xapp-docs.xml0000664000175000017500000000357114736763051015017 0ustar fabiofabio %gtkdocentities; ]> XApp Reference Manual &package_string; &package_version; API reference Object Hierarchy API Index Index of deprecated API xapp-2.8.8/docs/xml/0000775000175000017500000000000014736763051013171 5ustar fabiofabioxapp-2.8.8/docs/xml/meson.build0000664000175000017500000000107714736763051015340 0ustar fabiofabioent_conf = configuration_data() ent_conf.set('PACKAGE', 'xapps') ent_conf.set('PACKAGE_BUGREPORT', 'https://github.com/linuxmint/xapps/issues/new') ent_conf.set('PACKAGE_NAME', 'XApp') ent_conf.set('PACKAGE_STRING', meson.project_name()) ent_conf.set('PACKAGE_TARNAME', '@0@-@1@'.format(meson.project_name(), meson.project_version())) ent_conf.set('PACKAGE_URL', 'https://github.com/linuxmint/xapps') ent_conf.set('PACKAGE_VERSION', meson.project_version()) configure_file( input: 'gtkdocentities.ent.in', output: 'gtkdocentities.ent', configuration: ent_conf ) xapp-2.8.8/docs/xml/gtkdocentities.ent.in0000664000175000017500000000044614736763051017332 0ustar fabiofabio xapp-2.8.8/docs/_config.yml0000664000175000017500000000003514736763051014516 0ustar fabiofabiotheme: jekyll-theme-architectxapp-2.8.8/.gitignore0000664000175000017500000000042714736763051013434 0ustar fabiofabio# Specify filepatterns you want git to ignore. obj-* debian/tmp/ debian/*.debhelper debian/gir1.2-xapp-1.0/ debian/libxapp-dbg/ debian/libxapp-dev/ debian/libxapp1/ debian/xapps-common/ debian/xapps-doc/ debian/*.log debian/*.substvars debian/files debian/debhelper-build-stamp xapp-2.8.8/COPYING.LESSER0000664000175000017500000001674314736763051013503 0ustar fabiofabio GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. xapp-2.8.8/data/0000775000175000017500000000000014736763051012352 5ustar fabiofabioxapp-2.8.8/data/meson.build0000664000175000017500000000066214736763051014520 0ustar fabiofabio if not app_lib_only if get_option('debian_derivative') install_data(['80xapp-gtk3-module.sh'], rename : ['80xapp-gtk3-module'], install_dir: join_paths(get_option('sysconfdir'), 'X11', 'Xsession.d')) else install_data(['80xapp-gtk3-module.sh'], install_dir: join_paths(get_option('sysconfdir'), 'X11', 'xinit', 'xinitrc.d'), install_mode: 'rwxr-xr-x') endif endifxapp-2.8.8/data/80xapp-gtk3-module.sh0000664000175000017500000000036314736763051016161 0ustar fabiofabio#!/bin/bash # This file is sourced by xinit(1) or a display manager's Xsession, not executed. if [ -z "$GTK3_MODULES" ] ; then GTK3_MODULES="xapp-gtk3-module" else GTK3_MODULES="$GTK3_MODULES:xapp-gtk3-module" fi export GTK3_MODULES xapp-2.8.8/AUTHORS0000664000175000017500000000037314736763051012514 0ustar fabiofabio For a full list of contributors, please check: - https://github.com/linuxmint/xapps/graphs/contributors - The git log at https://github.com/linuxmint/xapps Also, Weitian Leung is the author of /usr/bin/xfce4-set-wallpaper.xapp-2.8.8/xapp.pot0000664000175000017500000000763214736763051013145 0ustar fabiofabio# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/status-applets/0000775000175000017500000000000014736763051014432 5ustar fabiofabioxapp-2.8.8/status-applets/meson.build0000664000175000017500000000005414736763051016573 0ustar fabiofabioif get_option('mate') subdir('mate') endif xapp-2.8.8/status-applets/mate/0000775000175000017500000000000014736763051015360 5ustar fabiofabioxapp-2.8.8/status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in0000664000175000017500000000056414736763051026714 0ustar fabiofabio[Applet Factory] Id=MateXAppStatusAppletFactory InProcess=false Location=@libexec@/xapps/mate-xapp-status-applet.py Name=XApp Status Applet Factory Description=Area where XApp status icons appear [MateXAppStatusApplet] Name=XApp Status Applet Description=Area where XApp status icons appear Icon=xapp-mate-status-applet MateComponentId=OAFIID:MATE_MateXAppStatusApplet; xapp-2.8.8/status-applets/mate/meson.build0000664000175000017500000000330714736763051017525 0ustar fabiofabio## Applet file conf = configuration_data() conf.set('locale', join_paths(get_option('prefix'), get_option('localedir'))) conf.set('pkgversion', meson.project_version()) # Put replacements in a separate file, and import the file into the applet. # This is mainly to make testing/dev easier - if you put the conf replacement # strings inside the applet itself, you have to build each time to get a valid # file (with all replacements made). With this, you can just copy from source, # and your replacements are already there in this file. constants_file = configure_file( input : 'applet_constants.py.in', output: 'applet_constants.py', configuration: conf, ) libexec_files = [ constants_file, 'mate-xapp-status-applet.py' ] install_data(libexec_files, install_dir: join_paths(get_option('libexecdir'), 'xapps') ) ## DBus service file conf = configuration_data() conf.set('libexec', join_paths(get_option('prefix'), get_option('libexecdir'))) service_file = configure_file( input : 'org.mate.panel.applet.MateXAppStatusAppletFactory.service.in', output: 'org.mate.panel.applet.MateXAppStatusAppletFactory.service', configuration: conf, ) install_data(service_file, install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services') ) ## Applet definition file def_file = configure_file( input: 'org.x.MateXAppStatusApplet.mate-panel-applet.in.in', output: 'org.x.MateXAppStatusApplet.mate-panel-applet.in', configuration: conf, ) i18n.merge_file( input: def_file, output: 'org.x.MateXAppStatusApplet.mate-panel-applet', type: 'desktop', po_dir: join_paths(meson.project_source_root(), 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'mate-panel', 'applets') ) xapp-2.8.8/status-applets/mate/mate-xapp-status-applet.py0000775000175000017500000004235514736763051022446 0ustar fabiofabio#!/usr/bin/python3 import locale import gettext import json import os import sys import setproctitle import gi gi.require_version("Gtk", "3.0") gi.require_version("XApp", "1.0") gi.require_version('MatePanelApplet', '4.0') from gi.repository import Gtk, GdkPixbuf, Gdk, GObject, Gio, XApp, GLib, MatePanelApplet import applet_constants # Rename the process setproctitle.setproctitle('mate-xapp-status-applet') # i18n gettext.install("xapp", applet_constants.LOCALEDIR) locale.bindtextdomain("xapp", applet_constants.LOCALEDIR) locale.textdomain("xapp") DEFAULT_ICON_SIZE = 22 VISIBLE_LABEL_MARGIN = 5 # When an icon has a label, add a margin between icon and label statusicon_css_string = """ .statuswidget-horizontal { border: none; padding-top: 0; padding-left: 2px; padding-bottom: 0; padding-right: 2px; } .statuswidget-vertical { border: none; padding-top: 2px; padding-left: 0; padding-bottom: 2px; padding-right: 0; } """ def translate_applet_orientation_to_xapp(mate_applet_orientation): # wtf...mate panel's orientation is.. the direction to center of monitor? if mate_applet_orientation == MatePanelApplet.AppletOrient.UP: return Gtk.PositionType.BOTTOM elif mate_applet_orientation == MatePanelApplet.AppletOrient.DOWN: return Gtk.PositionType.TOP elif mate_applet_orientation == MatePanelApplet.AppletOrient.LEFT: return Gtk.PositionType.RIGHT elif mate_applet_orientation == MatePanelApplet.AppletOrient.RIGHT: return Gtk.PositionType.LEFT class StatusWidget(Gtk.ToggleButton): __gsignals__ = { "re-sort": (GObject.SignalFlags.RUN_LAST, None, ()) } def __init__(self, icon, orientation, size, symbolic_icon_offset, color_icon_offset): super(Gtk.ToggleButton, self).__init__() self.theme = Gtk.IconTheme.get_default() self.orientation = orientation self.icon_size = DEFAULT_ICON_SIZE self.symbolic_icon_offset = symbolic_icon_offset self.color_icon_offset = color_icon_offset self.proxy = icon self.proxy.props.icon_size = DEFAULT_ICON_SIZE # this is the bus owned name self.name = self.proxy.get_name() self.add_events(Gdk.EventMask.SCROLL_MASK) # this is (usually) the name of the remote process self.proc_name = self.proxy.props.name self.box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self.image = Gtk.Image(hexpand=True) self.label = Gtk.Label(no_show_all=True) self.box.pack_start(self.image, True, False, 0) self.box.pack_start(self.label, False, False, 0) self.add(self.box) self.set_can_default(False) self.set_can_focus(False) self.set_relief(Gtk.ReliefStyle.NONE) self.set_focus_on_click(False) self.show_all() flags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE self.proxy.bind_property("label", self.label, "label", flags) self.proxy.bind_property("tooltip-text", self, "tooltip-markup", flags) self.proxy.bind_property("visible", self, "visible", flags) self.proxy.connect("notify::primary-menu-is-open", self.menu_state_changed) self.proxy.connect("notify::secondary-menu-is-open", self.menu_state_changed) self.highlight_both_menus = False if self.proxy.props.metadata not in ("", None): try: meta = json.loads(self.proxy.props.metadata) if meta["highlight-both-menus"]: self.highlight_both_menus = True except json.JSONDecodeError as e: print("Could not read metadata: %s" % e) self.proxy.connect("notify::icon-name", self._on_icon_name_changed) self.proxy.connect("notify::name", self._on_name_changed) self.in_widget = False self.plain_surface = None self.saturated_surface = None self.menu_opened = False self.connect("button-press-event", self.on_button_press) self.connect("button-release-event", self.on_button_release) self.connect("scroll-event", self.on_scroll) self.connect("enter-notify-event", self.on_enter_notify) self.connect("leave-notify-event", self.on_leave_notify) self.update_orientation() self.update_icon(size) def _on_icon_name_changed(self, proxy, gparamspec, data=None): self.update_icon() def _on_name_changed(self, proxy, gparamspec, data=None): self.emit("re-sort") def update_icon_offsets(self, symbolic, color): self.symbolic_icon_offset = symbolic self.color_icon_offset = color self.update_icon() def update_icon(self, new_size=None): if new_size != None and new_size == self.icon_size: return if new_size: self.icon_size = new_size self.proxy.props.icon_size = self.icon_size - self.symbolic_icon_offset string = self.proxy.props.icon_name self.set_icon(string) def update_style(self, orientation): ctx = self.get_style_context() if orientation == Gtk.Orientation.HORIZONTAL: ctx.remove_class("statuswidget-vertical") ctx.add_class("statuswidget-horizontal") else: ctx.remove_class("statuswidget-horizontal") ctx.add_class("statuswidget-vertical") def update_orientation(self): if self.orientation in (MatePanelApplet.AppletOrient.UP, MatePanelApplet.AppletOrient.DOWN): box_orientation = Gtk.Orientation.HORIZONTAL else: box_orientation = Gtk.Orientation.VERTICAL self.update_style(box_orientation) self.box.set_orientation(box_orientation) if len(self.label.props.label) > 0 and box_orientation == Gtk.Orientation.HORIZONTAL: self.label.set_visible(True) self.label.set_margin_start(VISIBLE_LABEL_MARGIN) else: self.label.set_visible(False) self.label.set_margin_start(0) def set_icon(self, string): fallback = True if string: if "symbolic" in string: size = self.icon_size - self.symbolic_icon_offset else: size = self.icon_size - self.color_icon_offset self.image.set_pixel_size(size) try: if os.path.exists(string): icon_file = Gio.File.new_for_path(string) icon = Gio.FileIcon.new(icon_file) self.image.set_from_gicon(icon, Gtk.IconSize.MENU) else: if self.theme.has_icon(string): icon = Gio.ThemedIcon.new(string) self.image.set_from_gicon(icon, Gtk.IconSize.MENU) fallback = False except GLib.Error as e: print("MateXAppStatusApplet: Could not load icon '%s' for '%s': %s" % (string, self.proc_name, e.message)) except TypeError as e: print("MateXAppStatusApplet: Could not load icon '%s' for '%s': %s" % (string, self.proc_name, str(e))) #fallback if fallback: self.image.set_pixel_size(self.icon_size - self.symbolic_icon_offset) self.image.set_from_icon_name("image-missing", Gtk.IconSize.MENU) def menu_state_changed(self, proxy, pspec, data=None): if pspec.name == "primary-menu-is-open": prop = proxy.props.primary_menu_is_open else: prop = proxy.props.secondary_menu_is_open if not self.menu_opened or prop == False: self.set_active(False) return self.set_active(prop) self.menu_opened = False # TODO? def on_enter_notify(self, widget, event): self.in_widget = True return Gdk.EVENT_PROPAGATE def on_leave_notify(self, widget, event): self.in_widget = False return Gdk.EVENT_PROPAGATE # /TODO def on_button_press(self, widget, event): self.menu_opened = False # If the user does ctrl->right-click, open the applet's about menu # instead of sending to the app. if event.state & Gdk.ModifierType.CONTROL_MASK and event.button == Gdk.BUTTON_SECONDARY: return Gdk.EVENT_PROPAGATE orientation = translate_applet_orientation_to_xapp(self.orientation) x, y = self.calc_menu_origin(widget, orientation) self.proxy.call_button_press(x, y, event.button, event.time, orientation, None, None) if event.button in (Gdk.BUTTON_MIDDLE, Gdk.BUTTON_SECONDARY): # Block the 'remove from panel' menu, and the middle-click drag. # They can still accomplish these things along the edges of the applet return Gdk.EVENT_STOP return Gdk.EVENT_STOP def on_button_release(self, widget, event): orientation = translate_applet_orientation_to_xapp(self.orientation) if event.button == Gdk.BUTTON_PRIMARY: self.menu_opened = True elif event.button == Gdk.BUTTON_SECONDARY and self.highlight_both_menus: self.menu_opened = True x, y = self.calc_menu_origin(widget, orientation) self.proxy.call_button_release(x, y, event.button, event.time, orientation, None, None) return Gdk.EVENT_PROPAGATE def on_scroll(self, widget, event): has, direction = event.get_scroll_direction() x_dir = XApp.ScrollDirection.UP delta = 0 if direction != Gdk.ScrollDirection.SMOOTH: x_dir = XApp.ScrollDirection(int(direction)) if direction == Gdk.ScrollDirection.UP: delta = -1 elif direction == Gdk.ScrollDirection.DOWN: delta = 1 elif direction == Gdk.ScrollDirection.LEFT: delta = -1 elif direction == Gdk.ScrollDirection.RIGHT: delta = 1 self.proxy.call_scroll_sync(delta, x_dir, event.time, None) def calc_menu_origin(self, widget, orientation): alloc = widget.get_allocation() ignore, x, y = widget.get_window().get_origin() rx = 0 ry = 0 if orientation == Gtk.PositionType.TOP: rx = x + alloc.x ry = y + alloc.y + alloc.height elif orientation == Gtk.PositionType.BOTTOM: rx = x + alloc.x ry = y + alloc.y elif orientation == Gtk.PositionType.LEFT: rx = x + alloc.x + alloc.width ry = y + alloc.y elif orientation == Gtk.PositionType.RIGHT: rx = x + alloc.x ry = y + alloc.y else: rx = x ry = y return rx, ry class MateXAppStatusApplet(object): def __init__(self, applet, iid): self.applet = applet self.applet.set_flags(MatePanelApplet.AppletFlags.EXPAND_MINOR) self.applet.set_can_focus(False) self.applet.set_background_widget(self.applet) self.settings = Gio.Settings(schema_id="org.x.apps.mate-panel-applet") self.settings.connect("changed", self.icon_offsets_changed) self.add_about() button_css = Gtk.CssProvider() try: button_css.load_from_data(statusicon_css_string.encode()) Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), button_css, 600) except Exception as e: print("Could not load style provider for icon box:", str(e)) self.applet.connect("realize", self.on_applet_realized) self.applet.connect("destroy", self.on_applet_destroy) self.indicators = {} self.monitor = None def add_about(self): group = Gtk.ActionGroup(name="xapp-status-applet-group") group.set_translation_domain("xapp") about_action = Gtk.Action(name="ShowAbout", icon_name="info", label=_("About"), visible=True) about_action.connect("activate", self.show_about) group.add_action(about_action) xml = '\ \ ' self.applet.setup_menu(xml, group) def show_about(self, action, data=None): dialog = Gtk.AboutDialog.new() dialog.set_program_name("XApp Status Applet") dialog.set_version(applet_constants.PKGVERSION) dialog.set_license_type(Gtk.License.GPL_3_0) dialog.set_website("https://github.com/linuxmint/xapps") dialog.set_logo_icon_name("panel-applets") dialog.set_comments(_("Area where XApp status icons appear")) dialog.run() dialog.destroy() def on_applet_realized(self, widget, data=None): self.indicator_box = Gtk.Box(visible=True) self.applet.add(self.indicator_box) self.applet.connect("change-size", self.on_applet_size_changed) self.applet.connect("change-orient", self.on_applet_orientation_changed) self.update_orientation() if not self.monitor: self.setup_monitor() def on_applet_destroy(self, widget, data=None): self.destroy_monitor() self.settings = None Gtk.main_quit() def setup_monitor (self): self.monitor = XApp.StatusIconMonitor() self.monitor.connect("icon-added", self.on_icon_added) self.monitor.connect("icon-removed", self.on_icon_removed) def make_key(self, proxy): name = proxy.get_name() path = proxy.get_object_path() # print("Key: %s" % (name+path)) return name + path def destroy_monitor (self): for key in self.indicators.keys(): self.indicator_box.remove(self.indicators[key]) self.monitor = None self.indicators = {} def on_icon_added(self, monitor, proxy): key = self.make_key(proxy) symbolic_icon_offset = self.settings.get_int("symbolic-icon-offset") color_icon_offset = self.settings.get_int("color-icon-offset") self.indicators[key] = StatusWidget(proxy, self.applet.get_orient(), self.applet.get_size(), symbolic_icon_offset, color_icon_offset) self.indicator_box.add(self.indicators[key]) self.indicators[key].connect("re-sort", self.sort_icons) self.sort_icons() def on_icon_removed(self, monitor, proxy): key = self.make_key(proxy) self.indicator_box.remove(self.indicators[key]) self.indicators[key].disconnect_by_func(self.sort_icons) del(self.indicators[key]) self.sort_icons() def update_orientation(self): self.on_applet_orientation_changed(self, self.applet.get_orient()) def on_applet_size_changed(self, applet, size, data=None): for key in self.indicators.keys(): indicator = self.indicators[key] indicator.update_icon(size) self.applet.queue_resize() def icon_offsets_changed(self, settings, key): symbolic = self.settings.get_int("symbolic-icon-offset") color = self.settings.get_int("color-icon-offset") for key in self.indicators.keys(): indicator = self.indicators[key] indicator.update_icon_offsets(symbolic, color) self.applet.queue_resize() def on_applet_orientation_changed(self, applet, applet_orient, data=None): orient = self.applet.get_orient() for key in self.indicators.keys(): indicator = self.indicators[key] indicator.orientation = orient indicator.update_orientation() if orient in (MatePanelApplet.AppletOrient.LEFT, MatePanelApplet.AppletOrient.RIGHT): self.indicator_box.set_orientation(Gtk.Orientation.VERTICAL) self.indicator_box.props.margin_start = 0 self.indicator_box.props.margin_end = 0 self.indicator_box.props.margin_top = 2 self.indicator_box.props.margin_bottom = 2 else: self.indicator_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.indicator_box.props.margin_start = 2 self.indicator_box.props.margin_end = 2 self.indicator_box.props.margin_top = 0 self.indicator_box.props.margin_bottom = 0 self.indicator_box.queue_resize() def sort_icons(self, status_widget=None): icon_list = list(self.indicators.values()) # for i in icon_list: # print("before: ", i.proxy.props.icon_name, i.proxy.props.name.lower()) icon_list.sort(key=lambda icon: icon.proxy.props.name.replace("org.x.StatusIcon.", "").lower()) icon_list.sort(key=lambda icon: icon.proxy.props.icon_name.lower().endswith("symbolic")) # for i in icon_list: # print("after: ", i.proxy.props.icon_name, i.proxy.props.name.lower()) icon_list.reverse() for icon in icon_list: self.indicator_box.reorder_child(icon, 0) def applet_factory(applet, iid, data): MateXAppStatusApplet(applet, iid) applet.show() return True def quit_all(widget): Gtk.main_quit() sys.exit(0) MatePanelApplet.Applet.factory_main("MateXAppStatusAppletFactory", True, MatePanelApplet.Applet.__gtype__, applet_factory, None) xapp-2.8.8/status-applets/mate/org.mate.panel.applet.MateXAppStatusAppletFactory.service.in0000664000175000017500000000016714736763051031031 0ustar fabiofabio[D-BUS Service] Name=org.mate.panel.applet.MateXAppStatusAppletFactory Exec=@libexec@/xapps/mate-xapp-status-applet.py xapp-2.8.8/status-applets/mate/applet_constants.py.in0000664000175000017500000000006214736763051021716 0ustar fabiofabioLOCALEDIR = "@locale@" PKGVERSION = "@pkgversion@"xapp-2.8.8/COPYING0000664000175000017500000010446614736763051012507 0ustar fabiofabioGNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .xapp-2.8.8/pygobject/0000775000175000017500000000000014736763051013427 5ustar fabiofabioxapp-2.8.8/pygobject/meson.build0000664000175000017500000000157314736763051015577 0ustar fabiofabiopygobject = dependency('pygobject-3.0', version: '>=2.9.0', required: true, ) override_dirs = get_option('py-overrides-dir') if override_dirs.length() == 0 or override_dirs[0] == '' override_dirs = [] pymod = import('python') python_targets = get_option('python_target') foreach python_target : python_targets python_install = pymod.find_installation(python_target) r = run_command(python_install, '-c', 'import gi;print(gi._overridesdir)', check: false) if r.returncode() != 0 error('Error getting the GObject Introspection override directory: ' + r.stderr()) endif override_dirs += r.stdout().strip() endforeach endif message('PyGObject overrides dirs: @0@'.format(override_dirs)) foreach override_dir : override_dirs install_data(['XApp.py'], install_dir: override_dir, ) endforeach xapp-2.8.8/pygobject/XApp.py0000664000175000017500000000161014736763051014647 0ustar fabiofabiofrom gi.overrides import override from gi.importer import modules """ The only purpose of this file is to ensure the XApp widget GType is registered at the time of import. Otherwise any user of XApp.GtkWindow would have to create a dummy widget prior to using a GtkBuilder to parse a ui file containing an XAppGtkWindow. The gi import machinery sweeps usr/lib/python*/dist-packages/gi/overrides for file matching the module name at the time of execution. This file needs to be in both python2 and python3 overrides locations. """ XApp = modules['XApp']._introspection_module __all__ = [] class GtkWindow(XApp.GtkWindow): pass class GtkButton(XApp.IconChooserButton): pass class GtkBin(XApp.StackSidebar): pass GtkWindow = override(GtkWindow) GtkButton = override(GtkButton) GtkBin = override(GtkBin) __all__.append('GtkWindow') __all__.append('GtkButton') __all__.append('GtkBin') xapp-2.8.8/.github/0000775000175000017500000000000014736763051013001 5ustar fabiofabioxapp-2.8.8/.github/workflows/0000775000175000017500000000000014736763051015036 5ustar fabiofabioxapp-2.8.8/.github/workflows/build.yml0000664000175000017500000000130514736763051016657 0ustar fabiofabioname: Build on: push: branches: - master pull_request: branches: - master workflow_dispatch: inputs: debug_enabled: type: boolean description: 'Start an SSH server on failure.' required: false default: false jobs: build: uses: linuxmint/github-actions/.github/workflows/do-builds.yml@master with: commit_id: master ############################## Comma separated list - like 'linuxmint/xapp, linuxmint/cinnamon-desktop' dependencies: ############################## Comma separated lists of words and files to have codespell ignore. codespell_ignore_words_list: nd codespell_ignore_files_list: xapp-2.8.8/.github/ISSUE_TEMPLATE/0000775000175000017500000000000014736763051015164 5ustar fabiofabioxapp-2.8.8/.github/ISSUE_TEMPLATE/bug_report.yaml0000664000175000017500000000647214736763051020231 0ustar fabiofabioname: Bug Report description: File a bug report body: - type: markdown attributes: value: | ### STOP! Before continuing: - Please try searching for [existing reports](https://github.com/linuxmint/xapp/issues?q=is%3Aissue+state%3Aall) that may match the behavior you're seeing. *If you find one, add to that issue, instead of opening a new one*. Include any relevant details that may differ from the original author's. - Check your logs - there may be some obvious cause for your trouble - in Linux Mint you can check ~/.xsession-errors (a hidden file in your Home folder). - If this is a *crash*, provide information about it if possible (CoreDump file, stack trace, etc...). In Linux Mint you can check the System Reports program. - Have you tried rebooting? --- Thank you for taking the time to report this issue. To allow us to work as efficiently as possible at resolving this, we need some information from you. - type: input id: distro attributes: label: Distribution description: Which Linux distribution are you using? Please be as specific as possible. placeholder: "example: Mint 21.1" validations: required: true - type: input id: pkgver attributes: label: Package version description: Please provide the libxapp version. In Linux Mint you can run `dpkg --list | grep libxapp` in a terminal. placeholder: "example: 2.8.1" validations: required: true - type: input id: graphics attributes: label: Graphics hardware in use description: Please provide information about your graphics hardware, if known. If you are using a dual-gpu system please specify that also. placeholder: "example: NVIDIA GeForce GTX 1660 TI" validations: required: false - type: dropdown id: frequency attributes: label: Frequency description: How often does this behavior occur? options: - Always - Quite often - Only occasionally validations: required: true - type: textarea id: current-behavior attributes: label: Bug description description: Please describe what is happening validations: required: true - type: textarea id: steps attributes: label: Steps to reproduce description: Please try to provide **detailed** steps on the most direct way to reproduce this issue. The chances of a bug being fixed go up **considerably** if we are able to duplicate the behavior ourselves. validations: required: true - type: textarea id: expected-behavior attributes: label: Expected behavior description: Describe what you think should happen instead of the current behavior. validations: required: true - type: textarea id: more-info attributes: label: Additional information description: You can add any other information you think may be relevant. validations: required: false - type: markdown attributes: value: | #### By submitting this report you agree to behave respectfully and in a mature manner. If in doubt, refer to the [Golden Rule](https://en.wikipedia.org/wiki/Golden_Rule) and [Github's Community Guidelines](https://docs.github.com/en/site-policy/github-terms/github-community-guidelines). xapp-2.8.8/.github/ISSUE_TEMPLATE/feature_request.md0000664000175000017500000000042014736763051020705 0ustar fabiofabio--- name: Feature request (OBSOLETE) about: Feature requests are no longer accepted here, please use https://github.com/orgs/linuxmint/discussions instead. title: "" labels: ["FEATURE REQUEST"] assignees: '' --- Please use: https://github.com/orgs/linuxmint/discussionsxapp-2.8.8/scripts/0000775000175000017500000000000014736763051013130 5ustar fabiofabioxapp-2.8.8/scripts/meson.build0000664000175000017500000000043114736763051015270 0ustar fabiofabioscripts = files( 'pastebin', 'upload-system-info', 'xapp-gpu-offload') if get_option('xfce') scripts += files('xfce4-set-wallpaper') endif install_data(scripts, install_dir: join_paths(get_option('prefix'), get_option('bindir')), install_mode: 'rwxr-xr-x' ) xapp-2.8.8/scripts/upload-system-info0000775000175000017500000000113514736763051016615 0ustar fabiofabio#!/usr/bin/python3 import subprocess, os try: inxi = subprocess.Popen(['inxi', '-Fxxrzc0'], stdout=subprocess.PIPE) pastebin = subprocess.Popen(['/usr/bin/pastebin'], stdin=inxi.stdout, stdout=subprocess.PIPE) inxi.stdout.close() output = pastebin.communicate()[0] output = output.split()[0] # if we have more than one URL, only use the first one pastebin.wait() subprocess.call(['xdg-open', output]) except Exception as e: print ("An error occurred while uploading the system information:") print (e) print ("Please make sure you're connected to the Internet.") xapp-2.8.8/scripts/pastebin0000775000175000017500000000141014736763051014657 0ustar fabiofabio#!/usr/bin/python3 import sys import os import stat import subprocess content = "" mode = os.fstat(0).st_mode if stat.S_ISFIFO(mode): content = sys.stdin.read() elif stat.S_ISREG(mode): content = sys.stdin.read() else: args = sys.argv[1:] if len(args) == 1 and os.path.exists(args[0]): with open(args[0], 'r') as infile: content = infile.read() else: str_args = ' '.join(args) content = str_args if content != "": if os.path.exists('/usr/bin/fpaste'): p = subprocess.Popen(['/usr/bin/fpaste'], stdin=subprocess.PIPE) p.communicate(content.encode("UTF-8")) else: p = subprocess.Popen(['nc', 'termbin.com', '9999'], stdin=subprocess.PIPE) p.communicate(content.encode("UTF-8")) xapp-2.8.8/scripts/xfce4-set-wallpaper0000775000175000017500000000123414736763051016645 0ustar fabiofabio#!/bin/bash # Author: Weitian Leung # Version: 2.1 # License: GPL-3.0 # Description: set a picture as xfce4 wallpaper # xfce4-desktop requires an absolute path. wallpaper="$(realpath "$1")" # check image mime_type=`file --mime-type -b "$wallpaper"` if [[ ! "$mime_type" == image/* ]]; then echo "Invalid image" exit 1 fi # set to every monitor that contains image-path/last-image properties=$(xfconf-query -c xfce4-desktop -p /backdrop -l | grep -e "screen.*/monitor.*image-path$" -e "screen.*/monitor.*/last-image$") for property in $properties; do xfconf-query -c xfce4-desktop -p $property -s "$wallpaper" done xapp-2.8.8/scripts/xapp-gpu-offload0000664000175000017500000000527714736763051016237 0ustar fabiofabio#!/usr/bin/python3 import sys import os import argparse import gi gi.require_version('XApp', '1.0') from gi.repository import XApp helper = XApp.GpuOffloadHelper.get_sync() def list_gpus(): info = helper.get_default_info() print("{: <1} {: <6} {: <20} [{: <20}]".format(info.id, "default" if info.is_default else "", info.get_shell_env_prefix(), info.display_name)) for info in helper.get_offload_infos(): print("{: <1} {: <6} {: <20} [{: <20}]".format(info.id, "default" if info.is_default else "", info.get_shell_env_prefix(), info.display_name)) def check_id(_id): if _id < 0 or _id >= helper.get_n_gpus(): print("A GPU with that ID does not exist", file=sys.stderr) exit(1) def _get_correct_info(_id): info = None if _id == -1: infos = helper.get_offload_infos() if infos: info = infos[0] else: info = helper.get_info_by_id(_id) if info is None: info = helper.get_default_info() return info def print_env(_id): info = _get_correct_info(_id) print(info.get_shell_env_prefix(), end="") def exec_command(_id, command): info = _get_correct_info(_id) env = os.environ if info: i = 0 strv = info.env_strv while i < len(strv): env[strv[i]] = strv[i + 1] i += 2 os.execvpe(command[0], command, env) parser = argparse.ArgumentParser(description="Launch a program using an alternate GPU, or if there are no others, like a normal program.", formatter_class=argparse.RawDescriptionHelpFormatter)# epilog=mode_help) parser.add_argument("command", type=str, nargs=argparse.REMAINDER, help="The program to run and arguments.") parser.add_argument("-i", "--id", help="Specify the GPU to use. If omitted, the first non-default GPU will be used.", action="store", type=int, default=-1) parser.add_argument("-l", "--list-gpus", help="List available GPUs.", action="store_true") parser.add_argument("-p", "--print-env", help="Print the environment variables to be prepended to a shell command. A newline is omitted.", action="store_true") args = parser.parse_args() if not args.command and not args.list_gpus and not args.print_env: parser.print_help() exit(0) _id = -1 if args.list_gpus: list_gpus() exit(0) if args.id > -1: if (not args.print_env) and len(args.command) == 0: print("The ID argument must be accompanied by --print-env or a command to run.", file=sys.stderr) exit(1) _id = args.id check_id(_id) if args.print_env: print_env(_id) exit(0) if args.command: exit(exec_command(_id, args.command)) exit(0) xapp-2.8.8/xapp-sn-watcher/0000775000175000017500000000000014736763051014462 5ustar fabiofabioxapp-2.8.8/xapp-sn-watcher/meson.build0000664000175000017500000000225314736763051016626 0ustar fabiofabiosn_watcher_generated = gnome.gdbus_codegen( 'sn-watcher-interface', 'sn-watcher.xml', interface_prefix: 'org.x.' ) sn_item_generated = gnome.gdbus_codegen( 'sn-item-interface', 'sn-item.xml', interface_prefix: 'org.x.' ) conf = configuration_data() conf.set('launch_folder', sn_watcher_dir) ## DBus service file service_file = configure_file( input : 'org.x.StatusNotifierWatcher.service.in', output: 'org.x.StatusNotifierWatcher.service', configuration: conf, install_dir: dbus_services_dir, install: true ) ## Autostart desktop file autostart_file = configure_file( input : 'xapp-sn-watcher.desktop.in', output: 'xapp-sn-watcher.desktop', configuration: conf, install_dir: join_paths(get_option('sysconfdir'), 'xdg', 'autostart'), install: true ) dbusmenu = dependency('dbusmenu-gtk3-0.4', required: true) cairo = dependency('cairo-gobject', required: true) watcher_sources = [ sn_watcher_generated, sn_item_generated, 'xapp-sn-watcher.c', 'sn-item.c' ] watcher = executable('xapp-sn-watcher', watcher_sources, include_directories: [ top_inc ], dependencies: [libxapp_dep, dbusmenu, cairo], install_dir: sn_watcher_dir, install: true )xapp-2.8.8/xapp-sn-watcher/sn-item.xml0000664000175000017500000000627314736763051016570 0ustar fabiofabio xapp-2.8.8/xapp-sn-watcher/xapp-sn-watcher.desktop.in0000664000175000017500000000032114736763051021477 0ustar fabiofabio[Desktop Entry] Type=Application Name=xapp-sn-watcher Comment=A service that provides the org.kde.StatusNotifierWatcher interface for XApps Exec=@launch_folder@/xapp-sn-watcher X-GNOME-Autostart-Phase=Panel xapp-2.8.8/xapp-sn-watcher/sn-item.c0000664000175000017500000010144714736763051016211 0ustar fabiofabio #include #include #include #include #include #include #include #include #include #include #include #include #include "sn-item-interface.h" #include "sn-item.h" #define DEBUG_FLAG XAPP_DEBUG_SN_WATCHER #include #define FALLBACK_ICON_SIZE 24 typedef enum { STATUS_PASSIVE, STATUS_ACTIVE, STATUS_NEEDS_ATTENTION } Status; typedef struct { gchar *id; gchar *title; gchar *status; gchar *tooltip_heading; gchar *tooltip_body; gchar *menu_path; gchar *icon_theme_path; gchar *icon_name; gchar *attention_icon_name; gchar *overlay_icon_name; gchar *icon_md5; gchar *attention_icon_md5; gchar *overlay_icon_md5; cairo_surface_t *icon_surface; cairo_surface_t *attention_icon_surface; cairo_surface_t *overlay_icon_surface; gboolean update_status; gboolean update_tooltip; gboolean update_menu; gboolean update_icon; gboolean update_id; } SnItemPropertiesResult; struct _SnItem { GObject parent_instance; GDBusProxy *sn_item_proxy; // SnItemProxy GDBusProxy *prop_proxy; // dbus properties (we can't trust SnItemProxy) XAppStatusIcon *status_icon; SnItemPropertiesResult *current_props; GCancellable *cancellable; Status status; gchar *png_paths[2]; gint current_icon_id; guint update_properties_timeout; gchar *sortable_name; gboolean should_activate; gboolean should_replace_tooltip; gboolean is_ai; GtkWidget *menu; }; G_DEFINE_TYPE (SnItem, sn_item, G_TYPE_OBJECT) static void update_menu (SnItem *item, SnItemPropertiesResult *new_props); static void update_status (SnItem *item, SnItemPropertiesResult *new_props); static void update_tooltip (SnItem *item, SnItemPropertiesResult *new_props); static void update_icon (SnItem *item, SnItemPropertiesResult *new_props); static void assign_sortable_name (SnItem *item, const gchar *title); static void props_free (SnItemPropertiesResult *props) { if (props == NULL) { return; } g_free (props->id); g_free (props->title); g_free (props->status); g_free (props->tooltip_heading); g_free (props->tooltip_body); g_free (props->menu_path); g_free (props->icon_theme_path); g_free (props->icon_name); g_free (props->attention_icon_name); g_free (props->overlay_icon_name); g_free (props->icon_md5); g_free (props->attention_icon_md5); g_free (props->overlay_icon_md5); cairo_surface_destroy (props->icon_surface); cairo_surface_destroy (props->attention_icon_surface); cairo_surface_destroy (props->overlay_icon_surface); g_slice_free (SnItemPropertiesResult, props); } static gboolean should_activate (SnItem *item) { gboolean should; gchar **whitelist = g_settings_get_strv (xapp_settings, WHITELIST_KEY); should = g_strv_contains ((const gchar * const *) whitelist, item->sortable_name); g_strfreev (whitelist); return should; } static gboolean should_replace_tooltip (SnItem *item) { gboolean should; gchar **ids = g_settings_get_strv (xapp_settings, REPLACE_TOOLTIP_KEY); should = g_strv_contains ((const gchar * const *) ids, item->sortable_name); g_strfreev (ids); return should; } static void update_conditionals (SnItem *item) { item->should_replace_tooltip = should_replace_tooltip (item); item->should_activate = should_activate (item); } static void sn_item_init (SnItem *self) { } static void sn_item_dispose (GObject *object) { SnItem *item = SN_ITEM (object); DEBUG ("SnItem dispose (%p)", object); g_clear_handle_id (&item->update_properties_timeout, g_source_remove); g_clear_pointer (&item->sortable_name, g_free); g_clear_object (&item->status_icon); g_clear_object (&item->prop_proxy); g_clear_object (&item->sn_item_proxy); g_clear_object (&item->cancellable); props_free (item->current_props); G_OBJECT_CLASS (sn_item_parent_class)->dispose (object); } static void sn_item_finalize (GObject *object) { DEBUG ("SnItem finalize (%p)", object); SnItem *item = SN_ITEM (object); g_unlink (item->png_paths[0]); g_free (item->png_paths[0]); g_unlink (item->png_paths[1]); g_free (item->png_paths[1]); G_OBJECT_CLASS (sn_item_parent_class)->finalize (object); } static void sn_item_class_init (SnItemClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = sn_item_dispose; gobject_class->finalize = sn_item_finalize; } static guint lookup_ui_scale (void) { GdkScreen *screen; GValue value = G_VALUE_INIT; guint scale = 1; g_value_init (&value, G_TYPE_UINT); screen = gdk_screen_get_default (); if (gdk_screen_get_setting (screen, "gdk-window-scaling-factor", &value)) { scale = g_value_get_uint (&value); } return scale; } static gint get_icon_id (SnItem *item) { item->current_icon_id = (!item->current_icon_id); return item->current_icon_id; } static gchar * get_temp_file (SnItem *item) { gchar *filename; gchar *full_path; filename = g_strdup_printf ("xapp-tmp-%p-%d.png", item, get_icon_id (item)); full_path = g_build_filename (xapp_get_tmp_dir (), filename, NULL); g_free (filename); return full_path; } static gint get_icon_size (SnItem *item) { gint size = 0; size = xapp_status_icon_get_icon_size (item->status_icon); if (size > 0) { return size; } return FALLBACK_ICON_SIZE; } static cairo_surface_t * surface_from_pixmap_data (gint width, gint height, guchar *data) { cairo_surface_t *surface; GdkPixbuf *pixbuf; gint rowstride, i; guchar alpha; surface = NULL; rowstride = width * 4; i = 0; while (i < 4 * width * height) { alpha = data[i ]; data[i ] = data[i + 1]; data[i + 1] = data[i + 2]; data[i + 2] = data[i + 3]; data[i + 3] = alpha; i += 4; } pixbuf = gdk_pixbuf_new_from_data (data, GDK_COLORSPACE_RGB, TRUE, 8, width, height, rowstride, (GdkPixbufDestroyNotify) g_free, NULL); if (pixbuf) { guint scale = lookup_ui_scale (); surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, NULL); g_object_unref (pixbuf); return surface; } return NULL; } static cairo_surface_t * get_icon_surface (SnItem *item, GVariant *pixmaps, gchar **md5) { GVariantIter *iter; cairo_surface_t *surface; gint width, height; gint largest_width, largest_height; gsize largest_data_size; GVariant *byte_array_var; gconstpointer data; guchar *best_image_array = NULL; largest_width = largest_height = 0; *md5 = NULL; g_variant_get (pixmaps, "a(iiay)", &iter); if (iter == NULL) { return NULL; } while (g_variant_iter_loop (iter, "(ii@ay)", &width, &height, &byte_array_var)) { if (width > 0 && height > 0 && byte_array_var != NULL && ((width * height) > (largest_width * largest_height))) { gsize data_size = g_variant_get_size (byte_array_var); if (data_size == width * height * 4) { data = g_variant_get_data (byte_array_var); if (data != NULL) { if (best_image_array != NULL) { g_free (best_image_array); } best_image_array = g_memdup (data, data_size); largest_data_size = data_size; largest_width = width; largest_height = height; } } } } g_variant_iter_free (iter); if (best_image_array == NULL) { return NULL; } surface = surface_from_pixmap_data (largest_width, largest_height, best_image_array); *md5 = g_compute_checksum_for_data (G_CHECKSUM_MD5, best_image_array, largest_data_size); if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) { cairo_surface_destroy (surface); return NULL; } return surface; } static void set_icon_from_pixmap (SnItem *item, SnItemPropertiesResult *new_props) { cairo_surface_t *surface; DEBUG ("Trying to use icon pixmap for %s", item->sortable_name); surface = NULL; if (item->status == STATUS_ACTIVE) { if (new_props->icon_surface) { surface = new_props->icon_surface; } } else if (item->status == STATUS_NEEDS_ATTENTION) { if (new_props->attention_icon_surface) { surface = new_props->attention_icon_surface; } else if (new_props->icon_surface) { surface = new_props->icon_surface; } } if (surface != NULL) { const gchar *current_png_path = item->png_paths[get_icon_id (item)]; cairo_status_t status = CAIRO_STATUS_SUCCESS; status = cairo_surface_write_to_png (surface, current_png_path); DEBUG ("Saving tmp image file for '%s' to '%s'", item->sortable_name, current_png_path); if (status != CAIRO_STATUS_SUCCESS) { g_warning ("Failed to save png of status icon"); } xapp_status_icon_set_icon_name (item->status_icon, current_png_path); return; } DEBUG ("No pixmaps to use"); xapp_status_icon_set_icon_name (item->status_icon, "image-missing"); } static gchar * get_name_or_path_from_theme (SnItem *item, const gchar *theme_path, const gchar *icon_name) { GtkIconInfo *info; gchar *filename; const gchar *array[2]; gint host_icon_size; array[0] = icon_name; array[1] = NULL; // We may have a theme path, but try the system theme first GtkIconTheme *theme = gtk_icon_theme_get_default (); host_icon_size = get_icon_size (item); info = gtk_icon_theme_choose_icon_for_scale (theme, array, host_icon_size, lookup_ui_scale (), GTK_ICON_LOOKUP_FORCE_SVG | GTK_ICON_LOOKUP_FORCE_SYMBOLIC); if (info != NULL) { // If the icon is found in the system theme, we can just pass along the icon name // as is, this way symbolics work properly. g_object_unref (info); return g_strdup (icon_name); } if (theme_path != NULL) { // Make a temp theme based off of the provided path GtkIconTheme *theme = gtk_icon_theme_new (); gtk_icon_theme_prepend_search_path (theme, theme_path); info = gtk_icon_theme_choose_icon_for_scale (theme, array, host_icon_size, lookup_ui_scale (), GTK_ICON_LOOKUP_FORCE_SVG | GTK_ICON_LOOKUP_FORCE_SYMBOLIC); g_object_unref (theme); } if (info == NULL) { return NULL; } filename = g_strdup (gtk_icon_info_get_filename(info)); g_object_unref (info); return filename; } static gboolean set_icon_name (SnItem *item, const gchar *icon_theme_path, const gchar *icon_name) { DEBUG ("Checking for icon name for %s - theme path: '%s', icon name: '%s'", item->sortable_name, icon_theme_path, icon_name); if (icon_name == NULL) { return FALSE; } if (g_path_is_absolute (icon_name)) { xapp_status_icon_set_icon_name (item->status_icon, icon_name); return TRUE; } else { gchar *used_name = get_name_or_path_from_theme (item, icon_theme_path, icon_name); if (used_name != NULL) { xapp_status_icon_set_icon_name (item->status_icon, used_name); g_free (used_name); return TRUE; } } return FALSE; } static gboolean set_icon_name_or_path (SnItem *item, SnItemPropertiesResult *new_props) { const gchar *name_to_use = NULL; // Set an icon here, even if we're passive (hidden) - eventually only the // status property might change, but we wouldn't have an icon then (unless // the app sets the icon at the same time). if (item->status == STATUS_ACTIVE || item->status == STATUS_PASSIVE) { if (new_props->icon_name) { name_to_use = new_props->icon_name; } } else if (item->status == STATUS_NEEDS_ATTENTION) { if (new_props->attention_icon_name) { name_to_use = new_props->attention_icon_name; } else if (new_props->icon_name) { name_to_use = new_props->icon_name; } } return set_icon_name (item, new_props->icon_theme_path, name_to_use); } static void update_icon (SnItem *item, SnItemPropertiesResult *new_props) { if (!set_icon_name_or_path (item, new_props)) { set_icon_from_pixmap (item, new_props); } } static void update_menu (SnItem *item, SnItemPropertiesResult *new_props) { DEBUG ("Possible new menu for '%s' - current path: '%s', new: '%s'", item->sortable_name, item->current_props->menu_path, new_props->menu_path); xapp_status_icon_set_primary_menu (item->status_icon, NULL); xapp_status_icon_set_secondary_menu (item->status_icon, NULL); g_clear_object (&item->menu); if (new_props->menu_path == NULL) { return; } if (g_strcmp0 (new_props->menu_path, "/NO_DBUSMENU") == 0) { DEBUG ("No menu set for '%s' (/NO_DBUSMENU)", item->sortable_name); return; } item->menu = GTK_WIDGET (dbusmenu_gtkmenu_new ((gchar *) g_dbus_proxy_get_name (item->sn_item_proxy), new_props->menu_path)); g_object_ref_sink (item->menu); if (item->is_ai && !item->should_activate) { xapp_status_icon_set_primary_menu (item->status_icon, GTK_MENU (item->menu)); } xapp_status_icon_set_secondary_menu (item->status_icon, GTK_MENU (item->menu)); } static gchar * capitalize (const gchar *string) { gchar *utf8; gunichar first; gchar *remaining; gchar *ret; utf8 = g_utf8_make_valid (string, -1); first = g_utf8_get_char (utf8); first = g_unichar_toupper (first); remaining = g_utf8_substring (utf8, 1, g_utf8_strlen (utf8, -1)); ret = g_strdup_printf ("%s%s", (gchar *) &first, remaining); g_free (utf8); g_free (remaining); return ret; } static void update_tooltip (SnItem *item, SnItemPropertiesResult *new_props) { if (new_props->title) { assign_sortable_name (item, new_props->title); } if (!item->should_replace_tooltip) { if (new_props->tooltip_heading != NULL) { if (new_props->tooltip_body != NULL) { gchar *text; text = g_strdup_printf ("%s\n%s", new_props->tooltip_heading, new_props->tooltip_body); xapp_status_icon_set_tooltip_text (item->status_icon, text); DEBUG ("Tooltip text for '%s' from ToolTip: %s", item->sortable_name, text); g_free (text); } else { DEBUG ("Tooltip text for '%s' from ToolTip: %s", item->sortable_name, new_props->tooltip_heading); xapp_status_icon_set_tooltip_text (item->status_icon, new_props->tooltip_heading); } return; } } if (new_props->title != NULL) { gchar *capped_string; capped_string = capitalize (new_props->title); xapp_status_icon_set_tooltip_text (item->status_icon, capped_string); DEBUG ("Tooltip text for '%s' from Title: %s", item->sortable_name, capped_string); g_free (capped_string); return; } xapp_status_icon_set_tooltip_text (item->status_icon, ""); } static void update_status (SnItem *item, SnItemPropertiesResult *new_props) { if (g_strcmp0 (new_props->status, "Passive") == 0) { item->status = STATUS_PASSIVE; xapp_status_icon_set_visible (item->status_icon, FALSE); } else if (g_strcmp0 (new_props->status, "NeedsAttention") == 0) { item->status = STATUS_NEEDS_ATTENTION; xapp_status_icon_set_visible (item->status_icon, TRUE); } else { item->status = STATUS_ACTIVE; xapp_status_icon_set_visible (item->status_icon, TRUE); } DEBUG ("Status for '%s' is now '%s'", item->sortable_name, new_props->status); } static gchar * null_or_string_from_string (const gchar *str) { if (str != NULL && strlen(str) > 0) { return g_strdup (str); } else { return NULL; } } static gchar * null_or_string_from_variant (GVariant *variant) { const gchar *str; str = g_variant_get_string (variant, NULL); return null_or_string_from_string (str); } static void get_all_properties_callback (GObject *source_object, GAsyncResult *res, gpointer user_data) { SnItem *item = SN_ITEM (user_data); SnItemPropertiesResult *new_props; GError *error = NULL; GVariant *properties; GVariantIter *iter = NULL; const gchar *name; GVariant *value; properties = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && !g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) { g_critical ("Could not get properties for %s: %s\n", g_dbus_proxy_get_name (item->sn_item_proxy), error->message); } g_error_free (error); return; } if (properties == NULL) { return; } new_props = g_slice_new0 (SnItemPropertiesResult); g_variant_get (properties, "(a{sv})", &iter); while (g_variant_iter_loop (iter, "{&sv}", &name, &value)) { if (g_strcmp0 (name, "Title") == 0) { new_props->title = null_or_string_from_variant (value); if (g_strcmp0 (new_props->title, item->current_props->title) != 0) { new_props->update_tooltip = TRUE; } } else if (g_strcmp0 (name, "Status") == 0) { new_props->status = null_or_string_from_variant (value); if (g_strcmp0 (new_props->status, item->current_props->status) != 0) { new_props->update_status = TRUE; } } else if (g_strcmp0 (name, "ToolTip") == 0) { const gchar *ts; ts = g_variant_get_type_string (value); if (g_strcmp0 (ts, "(sa(iiay)ss)") == 0) { gchar *heading, *body; g_variant_get (value, "(sa(iiay)ss)", NULL, NULL, &heading, &body); new_props->tooltip_heading = null_or_string_from_string (heading); new_props->tooltip_body = null_or_string_from_string (body); g_free (heading); g_free (body); } else if (g_strcmp0 (ts, "s") == 0) { new_props->tooltip_body = null_or_string_from_variant (value); } if (g_strcmp0 (new_props->tooltip_heading, item->current_props->tooltip_heading) != 0 || g_strcmp0 (new_props->tooltip_body, item->current_props->tooltip_body) != 0) { new_props->update_tooltip = TRUE; } } else if (g_strcmp0 (name, "Menu") == 0) { new_props->menu_path = null_or_string_from_variant (value); if (g_strcmp0 (new_props->menu_path, item->current_props->menu_path) != 0) { new_props->update_menu = TRUE; } } else if (g_strcmp0 (name, "IconThemePath") == 0) { new_props->icon_theme_path = null_or_string_from_variant (value); if (g_strcmp0 (new_props->icon_theme_path, item->current_props->icon_theme_path) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "IconName") == 0) { new_props->icon_name = null_or_string_from_variant (value); if (g_strcmp0 (new_props->icon_name, item->current_props->icon_name) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "IconPixmap") == 0) { new_props->icon_surface = get_icon_surface (item, value, &new_props->icon_md5); if (g_strcmp0 (new_props->icon_md5, item->current_props->icon_md5) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "AttentionIconName") == 0) { new_props->attention_icon_name = null_or_string_from_variant (value); if (g_strcmp0 (new_props->attention_icon_name, item->current_props->attention_icon_name) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "AttentionIconPixmap") == 0) { new_props->attention_icon_surface = get_icon_surface (item, value, &new_props->attention_icon_md5); if (g_strcmp0 (new_props->attention_icon_md5, item->current_props->attention_icon_md5) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "OverlayIconName") == 0) { new_props->overlay_icon_name = null_or_string_from_variant (value); if (g_strcmp0 (new_props->overlay_icon_name, item->current_props->overlay_icon_name) != 0) { new_props->update_icon = TRUE; } } else if (g_strcmp0 (name, "OverlayIconPixmap") == 0) { new_props->overlay_icon_surface = get_icon_surface (item, value, &new_props->overlay_icon_md5); if (g_strcmp0 (new_props->overlay_icon_md5, item->current_props->overlay_icon_md5) != 0) { new_props->update_icon = TRUE; } } if (g_strcmp0 (name, "Id") == 0) { new_props->id = null_or_string_from_variant (value); if (g_strcmp0 (new_props->id, item->current_props->id) != 0) { new_props->update_id = TRUE; } } } g_variant_iter_free (iter); g_variant_unref (properties); if (new_props->update_status) { update_status (item, new_props); } if (new_props->update_tooltip) { update_tooltip (item, new_props); } if (new_props->update_menu) { update_menu (item, new_props); } if (new_props->update_icon || new_props->update_status) { update_icon (item, new_props); } if ((new_props->update_id || new_props->update_status) && !new_props->update_tooltip) { assign_sortable_name (item, new_props->id); } props_free (item->current_props); item->current_props = new_props; } static gboolean update_all_properties (gpointer data) { SnItem *item = SN_ITEM (data); g_dbus_proxy_call (item->prop_proxy, "GetAll", g_variant_new ("(s)", g_dbus_proxy_get_interface_name (item->sn_item_proxy)), G_DBUS_CALL_FLAGS_NONE, 5 * 1000, item->cancellable, get_all_properties_callback, item); item->update_properties_timeout = 0; return G_SOURCE_REMOVE; } static void queue_update_properties (SnItem *item, gboolean force) { if (item->update_properties_timeout > 0) { g_source_remove (item->update_properties_timeout); } if (force) { props_free (item->current_props); item->current_props = g_slice_new0 (SnItemPropertiesResult); } item->update_properties_timeout = g_timeout_add (10, G_SOURCE_FUNC (update_all_properties), item); } static void sn_signal_received (GDBusProxy *sn_item_proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { SnItem *item = SN_ITEM (user_data); if (item->prop_proxy == NULL) { return; } DEBUG ("Signal received from StatusNotifierItem: %s", signal_name); if (g_strcmp0 (signal_name, "NewIcon") == 0 || g_strcmp0 (signal_name, "Id") == 0 || g_strcmp0 (signal_name, "NewAttentionIcon") == 0 || g_strcmp0 (signal_name, "NewOverlayIcon") == 0 || g_strcmp0 (signal_name, "NewToolTip") == 0 || g_strcmp0 (signal_name, "NewTitle") == 0 || g_strcmp0 (signal_name, "NewStatus") == 0 || g_strcmp0 (signal_name, "NewMenu") == 0) { queue_update_properties (item, FALSE); } } static void xapp_icon_activated (XAppStatusIcon *status_icon, guint button, guint _time, gpointer user_data) { } static void xapp_icon_button_press (XAppStatusIcon *status_icon, gint x, gint y, guint button, guint _time, gint panel_position, gpointer user_data) { SnItem *item = SN_ITEM (user_data); if (button == GDK_BUTTON_PRIMARY) { if (item->is_ai) { if (item->should_activate) { sn_item_interface_call_secondary_activate (SN_ITEM_INTERFACE (item->sn_item_proxy), x, y, NULL, NULL, NULL); return; } } else { sn_item_interface_call_activate (SN_ITEM_INTERFACE (item->sn_item_proxy), x, y, NULL, NULL, NULL); } } else if (button == GDK_BUTTON_MIDDLE) { sn_item_interface_call_secondary_activate (SN_ITEM_INTERFACE (item->sn_item_proxy), x, y, NULL, NULL, NULL); } } static void xapp_icon_button_release (XAppStatusIcon *status_icon, gint x, gint y, guint button, guint _time, gint panel_position, gpointer user_data) { SnItem *item = SN_ITEM (user_data); if (button == GDK_BUTTON_SECONDARY && item->menu == NULL) { sn_item_interface_call_context_menu (SN_ITEM_INTERFACE (item->sn_item_proxy), x, y, NULL, NULL, NULL); } } static void xapp_icon_scroll (XAppStatusIcon *status_icon, gint delta, XAppScrollDirection dir, guint _time, gpointer user_data) { SnItem *item = SN_ITEM (user_data); switch (dir) { case XAPP_SCROLL_LEFT: case XAPP_SCROLL_RIGHT: sn_item_interface_call_scroll (SN_ITEM_INTERFACE (item->sn_item_proxy), delta, "horizontal", NULL, NULL, NULL); break; case XAPP_SCROLL_UP: case XAPP_SCROLL_DOWN: sn_item_interface_call_scroll (SN_ITEM_INTERFACE (item->sn_item_proxy), delta, "vertical", NULL, NULL, NULL); break; } } static void xapp_icon_state_changed (XAppStatusIcon *status_icon, XAppStatusIconState new_state, gpointer user_data) { SnItem *item = SN_ITEM (user_data); if (new_state == XAPP_STATUS_ICON_STATE_NO_SUPPORT) { return; } queue_update_properties (item, TRUE); } static void assign_sortable_name (SnItem *item, const gchar *id) { gchar *init_name, *normalized; gchar *sortable_name, *old_sortable_name; if (id != NULL) { init_name = g_strdup (id); } else { init_name = g_strdup (g_dbus_proxy_get_name (G_DBUS_PROXY (item->sn_item_proxy))); } normalized = g_utf8_normalize (init_name, -1, G_NORMALIZE_DEFAULT); sortable_name = g_utf8_strdown (normalized, -1); g_free (init_name); g_free (normalized); if (g_strcmp0 (sortable_name, item->sortable_name) == 0) { g_free (sortable_name); return; } DEBUG ("Sort name for '%s' is '%s'", g_dbus_proxy_get_name (G_DBUS_PROXY (item->sn_item_proxy)), sortable_name); xapp_status_icon_set_name (item->status_icon, sortable_name); old_sortable_name = item->sortable_name; item->sortable_name = sortable_name; g_free (old_sortable_name); update_conditionals (item); } static void property_proxy_acquired (GObject *source, GAsyncResult *res, gpointer user_data) { SnItem *item = SN_ITEM (user_data); GError *error = NULL; gchar *json = NULL; item->prop_proxy = g_dbus_proxy_new_finish (res, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_critical ("Could not get property proxy for %s: %s\n", g_dbus_proxy_get_name (item->sn_item_proxy), error->message); g_error_free (error); return; } } g_signal_connect (item->sn_item_proxy, "g-signal", G_CALLBACK (sn_signal_received), item); item->status_icon = xapp_status_icon_new (); json = g_strdup_printf ("{ \"highlight-both-menus\": %s }", item->is_ai ? "true" : "false"); xapp_status_icon_set_metadata (item->status_icon, json); g_free (json); g_signal_connect (item->status_icon, "activate", G_CALLBACK (xapp_icon_activated), item); g_signal_connect (item->status_icon, "button-press-event", G_CALLBACK (xapp_icon_button_press), item); g_signal_connect (item->status_icon, "button-release-event", G_CALLBACK (xapp_icon_button_release), item); g_signal_connect (item->status_icon, "scroll-event", G_CALLBACK (xapp_icon_scroll), item); g_signal_connect (item->status_icon, "state-changed", G_CALLBACK (xapp_icon_state_changed), item); assign_sortable_name (item, NULL); update_conditionals (item); queue_update_properties (item, TRUE); } static void initialize_item (SnItem *item) { g_dbus_proxy_new (g_dbus_proxy_get_connection (item->sn_item_proxy), G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, g_dbus_proxy_get_name (item->sn_item_proxy), g_dbus_proxy_get_object_path (item->sn_item_proxy), "org.freedesktop.DBus.Properties", item->cancellable, property_proxy_acquired, item); } SnItem * sn_item_new (GDBusProxy *sn_item_proxy, gboolean is_ai) { SnItem *item = g_object_new (sn_item_get_type (), NULL); item->sn_item_proxy = sn_item_proxy; item->is_ai = is_ai; item->cancellable = g_cancellable_new (); item->png_paths[0] = get_temp_file (item); item->png_paths[1] = get_temp_file (item); initialize_item (item); return item; } xapp-2.8.8/xapp-sn-watcher/xapp-sn-watcher.c0000664000175000017500000005603714736763051017662 0ustar fabiofabio#include #include #include #include #include #define DEBUG_FLAG XAPP_DEBUG_SN_WATCHER #include #include #include "sn-watcher-interface.h" #include "sn-item-interface.h" #include "sn-item.h" #define XAPP_TYPE_SN_WATCHER xapp_sn_watcher_get_type () G_DECLARE_FINAL_TYPE (XAppSnWatcher, xapp_sn_watcher, XAPP, SN_WATCHER, GtkApplication) struct _XAppSnWatcher { GtkApplication parent_instance; SnWatcherInterface *skeleton; GDBusConnection *connection; GCancellable *cancellable; guint owner_id; guint name_listener_id; GHashTable *items; gboolean shutdown_pending; gboolean advertise_host; }; G_DEFINE_TYPE (XAppSnWatcher, xapp_sn_watcher, GTK_TYPE_APPLICATION) #define NOTIFICATION_WATCHER_NAME "org.kde.StatusNotifierWatcher" #define NOTIFICATION_WATCHER_PATH "/StatusNotifierWatcher" #define STATUS_ICON_MONITOR_PREFIX "org.x.StatusIconMonitor" #define FDO_DBUS_NAME "org.freedesktop.DBus" #define FDO_DBUS_PATH "/org/freedesktop/DBus" #define STATUS_ICON_MONITOR_MATCH "org.x.StatusIconMonitor" #define APPINDICATOR_PATH_PREFIX "/org/ayatana/NotificationItem/" GSettings *xapp_settings; static void continue_startup (XAppSnWatcher *watcher); static void update_published_items (XAppSnWatcher *watcher); static void handle_status_applet_name_owner_appeared (XAppSnWatcher *watcher, const gchar *name, const gchar *new_owner) { if (g_str_has_prefix (name, STATUS_ICON_MONITOR_PREFIX)) { if (watcher->shutdown_pending) { DEBUG ("A monitor appeared on the bus, cancelling shutdown\n"); watcher->shutdown_pending = FALSE; g_application_hold (G_APPLICATION (watcher)); if (watcher->owner_id == 0) { continue_startup (watcher); return; } else { sn_watcher_interface_set_is_status_notifier_host_registered (watcher->skeleton, watcher->advertise_host); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); sn_watcher_interface_emit_status_notifier_host_registered (watcher->skeleton); } } } } static void handle_sn_item_name_owner_lost (XAppSnWatcher *watcher, const gchar *name, const gchar *old_owner) { GList *keys, *l; keys = g_hash_table_get_keys (watcher->items); for (l = keys; l != NULL; l = l->next) { const gchar *key = l->data; if (g_str_has_prefix (key, name)) { DEBUG ("Client %s has exited, removing status icon", key); g_hash_table_remove (watcher->items, key); update_published_items (watcher); break; } } g_list_free (keys); } static void handle_status_applet_name_owner_lost (XAppSnWatcher *watcher, const gchar *name, const gchar *old_owner) { if (g_str_has_prefix (name, STATUS_ICON_MONITOR_PREFIX)) { DEBUG ("Lost a monitor, checking for any more"); if (xapp_status_icon_any_monitors ()) { DEBUG ("Still have a monitor, continuing"); return; } else { DEBUG ("Lost our last monitor, starting countdown\n"); if (!watcher->shutdown_pending) { watcher->shutdown_pending = TRUE; g_application_release (G_APPLICATION (watcher)); sn_watcher_interface_set_is_status_notifier_host_registered (watcher->skeleton, FALSE); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); } } } else { handle_sn_item_name_owner_lost (watcher, name, old_owner); } } static void name_owner_changed_signal (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { XAppSnWatcher *watcher = XAPP_SN_WATCHER (user_data); const gchar *name, *old_owner, *new_owner; g_variant_get (parameters, "(&s&s&s)", &name, &old_owner, &new_owner); DEBUG("NameOwnerChanged signal received (n: %s, old: %s, new: %s", name, old_owner, new_owner); if (!name) { return; } if (g_strcmp0 (new_owner, "") == 0) { handle_status_applet_name_owner_lost (watcher, name, old_owner); } else { handle_status_applet_name_owner_appeared (watcher, name, new_owner); } } static void add_name_listener (XAppSnWatcher *watcher) { DEBUG ("Adding NameOwnerChanged listener for status monitor existence"); watcher->name_listener_id = g_dbus_connection_signal_subscribe (watcher->connection, FDO_DBUS_NAME, FDO_DBUS_NAME, "NameOwnerChanged", FDO_DBUS_PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, name_owner_changed_signal, watcher, NULL); } static void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data) { XAppSnWatcher *watcher = XAPP_SN_WATCHER (user_data); DEBUG ("Lost StatusNotifierWatcher name (maybe something replaced us), exiting immediately"); g_application_quit (G_APPLICATION (watcher)); } static void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { XAppSnWatcher *watcher = XAPP_SN_WATCHER (user_data); DEBUG ("Name acquired on dbus"); sn_watcher_interface_set_protocol_version (watcher->skeleton, 0); sn_watcher_interface_set_is_status_notifier_host_registered (watcher->skeleton, watcher->advertise_host); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); sn_watcher_interface_emit_status_notifier_host_registered (watcher->skeleton); } static gboolean handle_register_host (SnWatcherInterface *skeleton, GDBusMethodInvocation *invocation, const gchar* service, XAppSnWatcher *watcher) { // Nothing to do - we wouldn't be here if there wasn't a host (status applet) sn_watcher_interface_complete_register_status_notifier_host (skeleton, invocation); return TRUE; } static void populate_published_list (const gchar *key, gpointer item, GPtrArray *array) { g_ptr_array_add (array, g_strdup (key)); } static void update_published_items (XAppSnWatcher *watcher) { GPtrArray *array; gpointer as; array = g_ptr_array_new (); g_hash_table_foreach (watcher->items, (GHFunc) populate_published_list, array); g_ptr_array_add (array, NULL); as = g_ptr_array_free (array, FALSE); sn_watcher_interface_set_registered_status_notifier_items (watcher->skeleton, (const gchar * const *) as); g_strfreev ((gchar **) as); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); } static gboolean create_key (const gchar *sender, const gchar *service, gchar **key, gchar **bus_name, gchar **path) { gchar *temp_key, *temp_bname, *temp_path; temp_key = temp_bname = temp_path = NULL; *key = *bus_name = *path = NULL; if (g_str_has_prefix (service, "/")) { temp_bname = g_strdup (sender); temp_path = g_strdup (service); } else { temp_bname = g_strdup (service); temp_path = g_strdup ("/StatusNotifierItem"); } if (!g_dbus_is_name (temp_bname)) { g_free (temp_bname); g_free (temp_path); return FALSE; } temp_key = g_strdup_printf ("%s%s", temp_bname, temp_path); DEBUG ("Key: '%s', busname '%s', path '%s'", temp_key, temp_bname, temp_path); *key = temp_key; *bus_name = temp_bname; *path = temp_path; return TRUE; } typedef struct { XAppSnWatcher *watcher; GDBusMethodInvocation *invocation; gchar *key; gchar *path; gchar *bus_name; gchar *service; } NewSnProxyData; static void free_sn_proxy_data (NewSnProxyData *data) { g_free (data->key); g_free (data->path); g_free (data->bus_name); g_free (data->service); g_object_unref (data->invocation); g_slice_free (NewSnProxyData, data); } static void sn_item_proxy_new_completed (GObject *source, GAsyncResult *res, gpointer user_data) { NewSnProxyData *data = (NewSnProxyData *) user_data; XAppSnWatcher *watcher = data->watcher; SnItem *item; gpointer stolen_ptr; GError *error = NULL; SnItemInterface *proxy; proxy = sn_item_interface_proxy_new_finish (res, &error); g_hash_table_steal_extended (watcher->items, data->key, &stolen_ptr, NULL); if ((gchar *) stolen_ptr == NULL) { g_dbus_method_invocation_return_error (data->invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "New StatusNotifierItem disappeared before " "its registration was complete."); free_sn_proxy_data (data); g_clear_object (&proxy); return; } if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { DEBUG ("Could not create new status notifier proxy item for item at %s: %s", data->bus_name, error->message); } g_free (stolen_ptr); free_sn_proxy_data (data); g_dbus_method_invocation_take_error (data->invocation, error); return; } item = sn_item_new ((GDBusProxy *) proxy, g_str_has_prefix (data->path, APPINDICATOR_PATH_PREFIX)); g_hash_table_insert (watcher->items, stolen_ptr, item); update_published_items (watcher); sn_watcher_interface_emit_status_notifier_item_registered (watcher->skeleton, data->service); sn_watcher_interface_complete_register_status_notifier_item (watcher->skeleton, data->invocation); free_sn_proxy_data (data); } static gboolean handle_register_item (SnWatcherInterface *skeleton, GDBusMethodInvocation *invocation, const gchar* service, XAppSnWatcher *watcher) { GError *error; const gchar *sender; g_autofree gchar *key = NULL, *bus_name = NULL, *path = NULL; sender = g_dbus_method_invocation_get_sender (invocation); if (!create_key (sender, service, &key, &bus_name, &path)) { error = g_error_new (g_dbus_error_quark (), G_DBUS_ERROR_INVALID_ARGS, "Invalid bus name from: %s, %s", service, sender); g_dbus_method_invocation_return_gerror (invocation, error); return FALSE; } if (!g_hash_table_contains (watcher->items, (const gchar *) key)) { NewSnProxyData *data; error = NULL; // DEBUG ("Key: '%s'", key); data = g_slice_new0 (NewSnProxyData); data->watcher = watcher; data->key = g_strdup (key); data->path = g_strdup (path); data->bus_name = g_strdup (bus_name); data->service = g_strdup (service); data->invocation = g_object_ref (invocation); /* Save a place in the hash table, some programs re-register frequently, * and we don't want the same app have two registrations here. */ g_hash_table_insert (watcher->items, g_strdup (key), NULL); sn_item_interface_proxy_new (watcher->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, bus_name, path, watcher->cancellable, sn_item_proxy_new_completed, data); } else { sn_watcher_interface_complete_register_status_notifier_item (watcher->skeleton, invocation); } return TRUE; } static gboolean export_watcher_interface (XAppSnWatcher *watcher) { GError *error = NULL; if (watcher->skeleton) { return TRUE; } watcher->skeleton = sn_watcher_interface_skeleton_new (); DEBUG ("Exporting StatusNotifierWatcher dbus interface to %s", NOTIFICATION_WATCHER_PATH); g_signal_connect (watcher->skeleton, "handle-register-status-notifier-item", G_CALLBACK (handle_register_item), watcher); g_signal_connect (watcher->skeleton, "handle-register-status-notifier-host", G_CALLBACK (handle_register_host), watcher); g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (watcher->skeleton), watcher->connection, NOTIFICATION_WATCHER_PATH, &error); if (error != NULL) { g_critical ("XAppSnWatcher: could not export StatusNotifierWatcher interface: %s", error->message); g_error_free (error); return FALSE; } return TRUE; } static gboolean on_interrupt (XAppSnWatcher *watcher) { DEBUG ("SIGINT - shutting down immediately"); g_application_quit (G_APPLICATION (watcher)); return FALSE; } static void continue_startup (XAppSnWatcher *watcher) { DEBUG ("Trying to acquire session bus connection"); g_unix_signal_add (SIGINT, (GSourceFunc) on_interrupt, watcher); g_application_hold (G_APPLICATION (watcher)); export_watcher_interface (watcher); watcher->owner_id = g_bus_own_name_on_connection (watcher->connection, NOTIFICATION_WATCHER_NAME, G_BUS_NAME_OWNER_FLAGS_REPLACE, on_name_acquired, on_name_lost, watcher, NULL); } static void unref_proxy (gpointer data) { // if g_hash_table_remove is called from handle_sn_item_name_owner_lost // *before* sn_item_proxy_new_completed is complete, the key will be // pointing to a NULL value, so avoid trying to free it. if (data == NULL) { return; } SnItem *item = SN_ITEM (data); if (item) { g_object_unref (item); } } static void clean_tempfiles (XAppSnWatcher *watcher) { gchar *cmd = g_strdup_printf ("rm -f %s/xapp-tmp-*.png", xapp_get_tmp_dir ()); // -Wunused-result if (system(cmd)) ; g_free (cmd); } static void watcher_startup (GApplication *application) { XAppSnWatcher *watcher = (XAppSnWatcher*) application; GError *error; G_APPLICATION_CLASS (xapp_sn_watcher_parent_class)->startup (application); xapp_settings = g_settings_new (STATUS_ICON_SCHEMA); watcher->items = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) unref_proxy); /* This buys us 30 seconds (gapp timeout) - we'll either be re-held immediately * because there's a monitor or exit after the 30 seconds. */ g_application_hold (application); g_application_release (application); watcher->cancellable = g_cancellable_new (); error = NULL; watcher->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (error != NULL) { g_critical ("Could not get session bus: %s\n", error->message); g_application_quit (application); } watcher->advertise_host = g_settings_get_boolean (xapp_settings, ADVERTISE_SNH_KEY); add_name_listener (watcher); if (xapp_status_icon_any_monitors ()) { continue_startup (watcher); } else { DEBUG ("No active monitors, exiting in 30s"); watcher->shutdown_pending = TRUE; } } static void watcher_finalize (GObject *object) { G_OBJECT_CLASS (xapp_sn_watcher_parent_class)->finalize (object); } static void watcher_shutdown (GApplication *application) { XAppSnWatcher *watcher = (XAppSnWatcher *) application; g_clear_object (&xapp_settings); if (watcher->name_listener_id > 0) { g_dbus_connection_signal_unsubscribe (watcher->connection, watcher->name_listener_id); watcher->name_listener_id = 0; } update_published_items (watcher); g_clear_pointer (&watcher->items, g_hash_table_unref); sn_watcher_interface_set_is_status_notifier_host_registered (watcher->skeleton, FALSE); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); sn_watcher_interface_emit_status_notifier_host_registered (watcher->skeleton); if (watcher->owner_id > 0) { g_bus_unown_name (watcher->owner_id); } if (watcher->skeleton != NULL) { g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (watcher->skeleton)); g_clear_object (&watcher->skeleton); } g_clear_object (&watcher->connection); g_clear_object (&watcher->cancellable); clean_tempfiles (watcher); G_APPLICATION_CLASS (xapp_sn_watcher_parent_class)->shutdown (application); } static void watcher_activate (GApplication *application) { } static void xapp_sn_watcher_init (XAppSnWatcher *watcher) { } static void xapp_sn_watcher_class_init (XAppSnWatcherClass *class) { GApplicationClass *application_class = G_APPLICATION_CLASS (class); GObjectClass *object_class = G_OBJECT_CLASS (class); application_class->startup = watcher_startup; application_class->shutdown = watcher_shutdown; application_class->activate = watcher_activate; object_class->finalize = watcher_finalize; } XAppSnWatcher * watcher_new (const gchar *current_desktop) { XAppSnWatcher *watcher; gboolean _register; g_set_application_name ("xapp-sn-watcher"); // FIXME: xfce-session crashes if we try to register. _register = g_strcmp0 (current_desktop, "XFCE") != 0; watcher = g_object_new (xapp_sn_watcher_get_type (), "application-id", "org.x.StatusNotifierWatcher", "inactivity-timeout", 30000, "register-session", _register, NULL); return watcher; } static void muted_log_handler (const char *log_domain, GLogLevelFlags log_level, const char *message, gpointer data) { } int main (int argc, char **argv) { XAppSnWatcher *watcher; gchar **whitelist; const gchar *current_desktop; gboolean should_start; int status; if (xapp_util_get_session_is_running ()) { // The session manager tries to restart this immediately in the event of a crash, // and we need a small delay between instances of xapp-sn-watcher to allow dbus and // status-notifier apps to cleanly process removal of the old one. // // Skip this at startup, as it would cause a delay during login, and there's no // existing process to replace anyhow. sleep (2); } xapp_settings = g_settings_new (STATUS_ICON_SCHEMA); if (g_settings_get_boolean (xapp_settings, DEBUG_KEY)) { g_setenv ("G_MESSAGES_DEBUG", "all", TRUE); gchar *flags = g_settings_get_string (xapp_settings, DEBUG_FLAGS_KEY); g_setenv ("XAPP_DEBUG", flags, TRUE); g_free (flags); } whitelist = g_settings_get_strv (xapp_settings, VALID_XDG_DESKTOPS_KEY); current_desktop = g_getenv ("XDG_CURRENT_DESKTOP"); if (current_desktop != NULL) { should_start = g_strv_contains ((const gchar * const *) whitelist, current_desktop); } else { g_warning ("XDG_CURRENT_DESKTOP not set, unable to check against enabled desktop list. Starting anyway..."); should_start = TRUE; } g_strfreev (whitelist); g_clear_object (&xapp_settings); if (!should_start) { DEBUG ("XDG_CURRENT_DESKTOP is '%s' - not starting XApp's StatusNotifierWatcher service." "If you want to change this, add your desktop's name to the dconf org.x.apps.statusicon " "'status-notifier-enabled-desktops' setting key.", current_desktop); exit(0); } // libdbusmenu and gtk throw a lot of menu-related warnings for problems we already handle. // They can be noisy in .xsession-errors, however. Redirect them to debug output only. DEBUG (""); // Initialize the DEBUGGING flag if (!DEBUGGING) { g_log_set_handler ("LIBDBUSMENU-GTK", G_LOG_LEVEL_WARNING, muted_log_handler, NULL); g_log_set_handler ("LIBDBUSMENU-GLIB", G_LOG_LEVEL_WARNING, muted_log_handler, NULL); g_log_set_handler ("Gtk", G_LOG_LEVEL_CRITICAL, muted_log_handler, NULL); } watcher = watcher_new (current_desktop); status = g_application_run (G_APPLICATION (watcher), argc, argv); g_object_unref (watcher); return status; } xapp-2.8.8/xapp-sn-watcher/sn-item.h0000664000175000017500000000141314736763051016206 0ustar fabiofabio#ifndef __SN_ITEM_H__ #define __SN_ITEM_H__ #include #include #include G_BEGIN_DECLS #define SN_TYPE_ITEM (sn_item_get_type ()) G_DECLARE_FINAL_TYPE (SnItem, sn_item, SN, ITEM, GObject) SnItem *sn_item_new (GDBusProxy *sn_item_proxy, gboolean is_ai); void sn_item_update_menus (SnItem *item); #define STATUS_ICON_SCHEMA "org.x.apps.statusicon" #define WHITELIST_KEY "left-click-activate-apps" #define VALID_XDG_DESKTOPS_KEY "status-notifier-enabled-desktops" #define DEBUG_KEY "sn-watcher-debug" #define DEBUG_FLAGS_KEY "sn-watcher-debug-flags" #define REPLACE_TOOLTIP_KEY "sn-watcher-replace-tooltip" #define ADVERTISE_SNH_KEY "sn-watcher-advertise-host" extern GSettings *xapp_settings; G_END_DECLS #endif /* __SN_ITEM_H__ */ xapp-2.8.8/xapp-sn-watcher/org.x.StatusNotifierWatcher.service.in0000664000175000017500000000012614736763051024005 0ustar fabiofabio[D-BUS Service] Name=org.x.StatusNotifierWatcher Exec=@launch_folder@/xapp-sn-watcher xapp-2.8.8/xapp-sn-watcher/sn-watcher.xml0000664000175000017500000000170514736763051017262 0ustar fabiofabio xapp-2.8.8/makepot0000775000175000017500000000067614736763051013040 0ustar fabiofabio#!/bin/bash rm -f xapp.pot touch xapp.pot xgettext --language=C --add-comments --keyword=_ --keyword=N_ --output=xapp.pot libxapp/*.c xgettext --language=Python --add-comments --keyword=_ --join-existing --output=xapp.pot status-applets/*/*.py xgettext --language=Desktop --join-existing --add-comments \ -k --keyword=Name --keyword=Description --output=xapp.pot status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in xapp-2.8.8/README.md0000664000175000017500000000172214736763051012722 0ustar fabiofabio![build](https://github.com/linuxmint/xapp/actions/workflows/build.yml/badge.svg) This project gathers the components which are common to multiple GTK desktop environments (Cinnamon, MATE and Xfce) and required to implement cross-DE solutions. # libxapp A library available in C, Python and other languages (via Gobject Introspection). # API Reference https://projects.linuxmint.com/xapp/reference/index.html # xapp-common A set of resources and tools. # Scope In the long term Xapps are there to provide applications to users in multiple DEs, but also to provide building blocks, resources and libraries to Linux developers who want to develop applications which work well in multiple DEs. This project is still relatively new though and we can't yet commit to a stable ABI. You are welcome to use libxapp or xapps-common in your application, but if you do, please make sure to tell us, so that we can communicate with you going forward about any potential changes. xapp-2.8.8/ChangeLog0000664000175000017500000000000114736763051013202 0ustar fabiofabio xapp-2.8.8/makedoc0000775000175000017500000000071714736763051012777 0ustar fabiofabio#!/usr/bin/python3 # This script is used to update the docs in docs/reference # which are served at https://projects.linuxmint.com/xapp/reference/index.html. import os import sys SRC="debian/tmp/usr/share/gtk-doc/html/libxapp/" if not os.path.exists(SRC): print("Build first, with dpkg-buildpackage") sys.exit(1) os.system("rm -rf docs/reference/*") os.system("cp -R %s/* docs/reference/" % SRC) print ("Docs updated, you can now commit and push.") xapp-2.8.8/meson_options.txt0000664000175000017500000000257014736763051015102 0ustar fabiofabiooption('docs', type: 'boolean', value: false, description: 'Build the API references (requires gtk-doc)' ) option('deprecated_warnings', type : 'boolean', value : false, description: 'Show build warnings for deprecations' ) option('py-overrides-dir', type : 'array', value : [], description: 'Path to pygobject overrides directory' ) option('python_target', type: 'array', value: ['python3'], description: 'Python installation to target to lookup if py-overrides-dir not supplied' ) option('status-notifier', type: 'boolean', value: true, description: 'Build the XApp StatusNotifier service.' ) option('app-lib-only', type: 'boolean', value: false, description: 'Limit build to core library only and without the keyboard layout controller. This is to allow flatpak bundlings.' ) option('debian_derivative', type: 'boolean', value: false, description: 'Use paths specific to Debian and derivatives.' ) option('mate', type: 'boolean', value: true, description: 'Install mate specific items.' ) option('xfce', type: 'boolean', value: true, description: 'Install xfce specific items.' ) option('introspection', type: 'boolean', value: true, description: 'Enable GObject Introspection.' ) option('vapi', type: 'boolean', value: true, description: 'Enable Vala bindings.' ) xapp-2.8.8/po/0000775000175000017500000000000014736763051012057 5ustar fabiofabioxapp-2.8.8/po/pt.po0000664000175000017500000001116614736763051013047 0ustar fabiofabio# Portuguese translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-07-03 12:23+0000\n" "Last-Translator: Hugo Carvalho \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritos" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operação não suportada" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Tamanho do ícone" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "O tamanho preferido do ícone." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ícone" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "A linha representando o ícone." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "A categoria padrão." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Ações" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicações" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorias" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositivos" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipos MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locais" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Estado" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Outro" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Escolha um ícone" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Pesquisar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Explorar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "A carregar..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Padrão" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Selecionar" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancelar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permitir caminhos" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Opção para permitir caminhos." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Ícone padrão" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "O ícone a utilizar por predefinição" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Selecione o ficheiro de imagem" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Abrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imagem" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Acerca" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Área onde aparecem os ícones de estado XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fábrica de mini-aplicações de estado XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Mini-aplicação de estado XApp" xapp-2.8.8/po/tr.po0000664000175000017500000001107314736763051013046 0ustar fabiofabio# Turkish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-26 15:05+0000\n" "Last-Translator: Butterfly \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Sık kullanılanlar" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "İşlem desteklenmiyor" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Simge boyutu" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tercih edilen simge boyutu." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Simge" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Simgeyi temsil eden dize." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Varsayılan kategori." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Eylemler" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Uygulamalar" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategoriler" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Aygıtlar" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Amblemler" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "İfade" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime türleri" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Yerler" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Durum" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Diğer" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Bir simge seçin" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Arama" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Gözat" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Yükleniyor..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Varsayılan" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seç" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "İptal" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Yollara İzin Ver" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Yollara izin verilip verilmeyeceği." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Varsayılan simge" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Varsayılan olarak kullanılacak simge" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Resim dosyası seç" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Aç" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Resim" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Hakkında" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp durum simgelerinin göründüğü alan" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Durum Uygulamacığı Üreticisi" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Durum Uygulamacığı" xapp-2.8.8/po/de.po0000664000175000017500000001111414736763051013005 0ustar fabiofabio# German translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-27 17:34+0000\n" "Last-Translator: Tobias Bannert \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoriten" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Vorgang wird nicht unterstützt" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Symbolgröße" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Die bevorzugte Symbolgröße." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Symbol" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Die Zeichenfolge stellt das Symbol dar." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Die Vorgabekategorie" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Aktionen" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Anwendungen" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorien" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Geräte" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Embleme" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime-Typen" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Orte" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Zustand" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Andere" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Ein Symbol auswählen" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Suchen" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Durchsuchen" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Wird geladen …" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Vorgabe" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Auswählen" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Abbrechen" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Pfade erlauben" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ob Pfade erlaubt sind." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Vorgabesymbol" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Das Symbol, welches als Vorgabe verwendet wird" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Bilddatei auswählen" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Öffnen" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Bild" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Über" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Bereich, in dem XApp-Statussymbole angezeigt werden." #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp-Status-Applet-Fabrik" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp-Status-Applet" xapp-2.8.8/po/fr_CA.po0000664000175000017500000001122414736763051013371 0ustar fabiofabio# French (Canada) translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-12-30 20:17+0000\n" "Last-Translator: AO \n" "Language-Team: French (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoris" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Cette opération n’est pas prise en charge" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Taille d’icône" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La taille d’icône souhaitée." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icône" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La chaîne qui représente l’icône." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Catégorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La catégorie par défaut." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applications" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Catégories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Appareils" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblèmes" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Émoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Types MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lieux" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "État" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Autre" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Choisissez une icône" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Chercher" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Parcourir" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Chargement…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Valeur par défaut" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Choisir" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Annuler" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Autoriser les chemins d’accès" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Autoriser ou non les chemins d’accès." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icône par défaut" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "L’icône à utiliser par défaut" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Choisir un fichier image" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ouvrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "À propos" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zone où les icônes d’état XApp apparaissent" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabrique d'applets d’état XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet d’état XApp" xapp-2.8.8/po/be.po0000664000175000017500000001165214736763051013012 0ustar fabiofabio# Belarusian translation for linuxmint # Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-05-23 11:49+0000\n" "Last-Translator: Anton Hryb \n" "Language-Team: Belarusian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Абраныя" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Аперацыя не падтрымліваецца" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Памер значка" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Пераважны памер значка." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Значок" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Радок, які прадстаўляе значок." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Катэгорыя" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Катэгорыя па змаўчанні." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Дзеянні" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Праграмы" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Катэгорыі" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Прылады" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Эмблемы" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Эмодзі" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Тыпы міма" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Месцы" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Стан" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Іншае" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Выберыце значок" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Пошук" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Аглядзець" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Загрузка..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Перадвызначана" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Выбраць" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Скасаваць" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Дазволіць шляхі" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ці дазваляць шляхі." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Перадвызначаны значок" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Значок выкарыстоўваецца па змаўчанні" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Выбраць выяву" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Адчыніць" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Выява" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Аб праграме" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Вобласць, у якой з'яўляецца XApp стан значка" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Status Applet Factory" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/en_CA.po0000664000175000017500000001076714736763051013377 0ustar fabiofabio# English (Canada) translation for linuxmint # Copyright (c) 2022 Rosetta Contributors and Canonical Ltd 2022 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2022. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-07-12 10:08+0000\n" "Last-Translator: Dawid Wiktor \n" "Language-Team: English (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favorites" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operation not supported" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Icon size" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "The preferred icon size." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "The string representing the icon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Category" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "The default category." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applications" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Devices" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblems" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime types" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Places" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Other" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Choose an icon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Search" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Browse" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Loading..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Default" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Select" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancel" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Allow Paths" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Whether to allow paths." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Default Icon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "The icon to use by default" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Select image file" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Open" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "About" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area where XApp status icons appear" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Status Applet Factory" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/meson.build0000664000175000017500000000005114736763051014215 0ustar fabiofabioi18n.gettext('xapp', preset: 'glib' )xapp-2.8.8/po/uz.po0000664000175000017500000001114414736763051013056 0ustar fabiofabio# Uzbek translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-05-03 10:20+0000\n" "Last-Translator: Umidjon Almasov \n" "Language-Team: Uzbek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: uz\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Sevimlilar" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Amal qo‘llab-quvvatlanmaydi" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Belgi o‘lchami" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tanlangan belgi o‘lchami." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Belgi" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Belgini ifodalovchi satr." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Turkum" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Standart turkum." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Amallar" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Ilovalar" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Turkumlar" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Qurilmalar" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemalar" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME turlari" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Joylar" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Holat" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Boshqa" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Belgini tanlang" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Qidirish" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Ko‘rib chiqish" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Yuklanmoqda..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Standart" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Tanlash" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Bekor qilish" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Yoʻllarga ruxsat berish" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Yo‘llarga ruxsat berish yoki bermaslik." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Standart belgi" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Standart bo‘yicha foydalanish uchun belgi" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Rasm faylini tanlash" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ochish" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Rasm" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Haqida" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp holati belgilari paydo bo‘ladigan hudud" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp holat appleti fabrikasi" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp holat appleti" xapp-2.8.8/po/en_GB.po0000664000175000017500000001103414736763051013370 0ustar fabiofabio# English (United Kingdom) translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-01-05 15:11+0000\n" "Last-Translator: Stephan Woidowski \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favourites" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operation not supported" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Icon size" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "The preferred icon size." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "The string representing the icon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Category" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "The default category." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applications" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Devices" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblems" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime types" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Places" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Other" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Choose an icon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Search" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Browse" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Loading..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Default" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Select" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancel" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Allow Paths" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Whether to allow paths." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Default Icon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "The icon to use by default" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Select image file" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Open" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "About" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area where XApp status icons appear" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Status Applet Factory" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/zh_TW.po0000664000175000017500000001075114736763051013456 0ustar fabiofabio# Chinese (Traditional) translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-02-12 11:19+0000\n" "Last-Translator: 爽自由 \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "喜好" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "不支援的操作" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "圖示大小" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "喜好的圖示大小。" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "圖示" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "以字串代表圖示" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "類型" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "預設類型" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "動作" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "應用程式" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "類型" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "設備" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "徽章" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "繪文字" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime 類型" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "位置" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "狀態" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "其他" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "選擇圖示" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "搜尋" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "瀏覽" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "載入中…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "預設" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "選取" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "取消" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "允許路徑" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "是否允許路徑。" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "預設圖示" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "預設使用的圖示。" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "選擇圖片檔" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "開啟" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "圖片" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "關於" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp 狀態圖示顯示位置" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp 狀態小工具工廠" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp 狀態小工具" xapp-2.8.8/po/cs.po0000664000175000017500000001112514736763051013024 0ustar fabiofabio# Czech translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-09-21 18:33+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Oblíbené" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operace není podporována" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Velikost ikony" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Upřednostňovaná velikost ikony." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Řetězec představující ikonu" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Výchozí kategorie." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Akce" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikace" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorie" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Zařízení" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Symbolické obrázky" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Smajlíky" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME typy" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Místa" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stav" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Ostatní" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Zvolte ikonu" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Hledat" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Procházet" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Načítání…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Výchozí" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Vybrat" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Storno" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Umožnit popisy umístění" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Zda umožnit popisy umístění." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Výchozí ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikonu kterou použít jako výchozí" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Vyberte soubor s obrázkem" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Otevřít" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Obrázek" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O aplikaci" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Oblast ve které XApp stavová ikona objeví" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Výchozí nastavení apletu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Stavový applet XApp" xapp-2.8.8/po/nl.po0000664000175000017500000001123114736763051013026 0ustar fabiofabio# Dutch translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-25 19:04+0000\n" "Last-Translator: Pjotr12345 \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favorieten" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Bewerking niet ondersteund" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Pictogramgrootte" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "De voorkeursgrootte van de pictogrammen." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Pictogram" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "De tekenreeks die het pictogram vertegenwoordigt." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "De standaardcategorie." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Acties" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Toepassingen" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorieën" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Apparaten" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemen" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emotiepictogrammen" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Bestandssoorten" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locaties" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Overige" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Kies een pictogram" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Zoeken" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Verkennen" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Bezig met laden…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Standaard" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Kiezen" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Afbreken" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Paden toestaan" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Of paden al dan niet moeten worden toegestaan." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Standaardpictogram" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Het standaard te gebruiken pictogram" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Kies afbeeldingsbestand" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Openen" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Afbeelding" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Over" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Gebied waar XApp-statuspictogrammen verschijnen" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabriek van status-werkbalkhulpje van XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Status-werkbalkhulpje van XApp" xapp-2.8.8/po/th.po0000664000175000017500000001143314736763051013034 0ustar fabiofabio# Thai translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-09-21 09:25+0000\n" "Last-Translator: Rockworld \n" "Language-Team: Thai \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "รายการโปรด" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "ไม่รองรับการดำเนินการนี้" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "ขนาดไอคอน" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "ขนาดไอคอนที่ต้องการ" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ไอคอน" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "สตริงที่สื่อถึงไอคอน" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "หมวดหมู่" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "หมวดหมู่ปริยาย" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "การกระทำ" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "แอปพลิเคชัน" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "หมวดหมู่" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "อุปกรณ์" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "ป้ายสัญลักษณ์" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "อีโมจิ" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "ประเภท Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "สถานที่" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "สถานะ" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "อื่นๆ" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "เลือกไอคอน" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "ค้นหา" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "ท่องดู" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "กำลังโหลด..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "ปริยาย" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "เลือก" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "ยกเลิก" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "เปิด" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "ภาพ" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "เกี่ยวกับ" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/da.po0000664000175000017500000001105314736763051013003 0ustar fabiofabio# Danish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-25 17:04+0000\n" "Last-Translator: Alan Mortensen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritter" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Handlingen er ikke understøttet" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikonstørrelse" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Den foretrukne ikonstørrelse." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Strengen som repræsenterer ikonet." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Standardkategorien." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Handlinger" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Programmer" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorier" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Enheder" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemer" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mimetyper" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Steder" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Andet" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Vælg et ikon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Søg" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Gennemse" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Indlæser …" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Standard" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Vælg" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Annullér" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Tillad stier" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Hvorvidt stier skal tillades." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Standardikon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Det ikon som skal bruges som standard." #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Vælg billedfil" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Åbn" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Billede" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Om" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Område hvor XApp-statusikoner vises" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp status-panelprogramfabrik" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp status-panelprogram" xapp-2.8.8/po/ru.po0000664000175000017500000001201014736763051013037 0ustar fabiofabio# Russian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-01-10 06:20+0000\n" "Last-Translator: Aleksey Kabanov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Избранное" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Действие не поддерживается" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Размер значка" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Предпочтительный размер значка." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Значок" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Строка, соответствующая значку." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Категория" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Категория по умолчанию." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Действия" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Приложения" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Категории" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Устройства" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Эмблемы" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Эмодзи" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Типы MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Места" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Статус" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Другое" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Выберите значок" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Поиск" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Обзор" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Загрузка…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "По умолчанию" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Выбрать" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Отмена" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Разрешать пути" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Разрешать ли пути." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Значок по умолчанию" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Значок, используемый по умолчанию" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Выберите файл изображения" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Открыть" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Изображение" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "О программе" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Область, где появляется значок статуса XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Заводские настройки апплета статуса XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Апплет статуса XApp" xapp-2.8.8/po/ckb.po0000664000175000017500000001047614736763051013166 0ustar fabiofabio# Kurdish, Central translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-05-17 01:07+0000\n" "Last-Translator: rasti \n" "Language-Team: Kurdish, Central \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "قەبارەی وێنۆچکە" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "وێنۆچکە" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "هاوپۆل" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "هاوپۆله‌كان" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "بیچم" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "وێنۆچکەیەک هەڵبژێرە" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "گه‌ڕان" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "باردەکا..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "وێنۆچکەی بنەڕەت" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "پەڕگەیەکی وێنەیی دیاری بکە" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "کردنەوە" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "وێنە" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "دەربارە" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/cy.po0000664000175000017500000001111014736763051013024 0ustar fabiofabio# Welsh translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-10-28 15:45+0000\n" "Last-Translator: Rhoslyn Prys \n" "Language-Team: Welsh \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: cy\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Ffefrynnau" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Nid yw'r weithred yn cael ei chynnal" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Maint eicon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Y maint eicon dewisol." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Eicon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Y llinyn sy'n cynrychioli'r eicon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Y categori rhagosodedig" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Gweithredoedd" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Rhaglenni" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorïau" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dyfeisiau" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Arwyddluniau" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mathau mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Mannau" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Statws" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Arall" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Dewis eicon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Chwilio" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Pori" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Yn llwytho..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Rhagosodedig" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Dewis" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Diddymu" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Caniatáu Llwybrau" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "P'un ai i ganiatáu llwybrau." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Eicon rhagosodedig" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Yr eicon i'w ddefnyddio drwy rhagosodiad" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Dewis ffeil delwedd" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Agor" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Delwedd" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Ynghylch" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Yr ardal lle mae'r eiconau statws XApp yn ymddangos" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Ffactori Apled XApp Status" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Apled XApp Status" xapp-2.8.8/po/es.po0000664000175000017500000001117114736763051013027 0ustar fabiofabio# Spanish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-28 12:57+0000\n" "Last-Translator: Toni Estevez \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritos" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operación no admitida" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Tamaño de icono" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tamaño de icono preferido." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icono" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La cadena que representa un icono." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoría" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La categoría predeterminada." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Acciones" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicaciones" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorías" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositivos" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipos MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lugares" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Estado" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Otros" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Elija un icono" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Buscar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Examinar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Cargando..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predeterminada" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seleccionar" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancelar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permitir rutas" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Si se permiten rutas o no." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icono predeterminado" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "El icono usado por defecto" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Seleccionar un archivo de imagen" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Abrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imagen" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Acerca de" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Área donde aparecen los iconos de estado de XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fábrica de la miniaplicación del estado de XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Miniaplicación del estado de XApp" xapp-2.8.8/po/sk.po0000664000175000017500000001115714736763051013041 0ustar fabiofabio# Slovak translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-02-10 18:36+0000\n" "Last-Translator: Adrián Bíro \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: sk\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Obľúbené položky" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operácia nie je podporovaná" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Veľkosť ikony" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Preferovaná veľkosť ikony." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Reťazec reprezentujúci ikonu." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategória" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Predvolená kategória." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Akcie" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikácie" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategórie" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Zariadenia" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblémy" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emotikony" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime typy" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Miesta" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Ostatné" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Výber ikony" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Hľadať" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Prehliadať" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Načítava sa…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predvolená" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Vybrať" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Zrušiť" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Povoliť cesty" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Či povoliť cesty." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Predvolená ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikona použitá automaticky" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Vybrať súbor obrázku" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Otvoriť" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Obrázok" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O aplikácii" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Miesto kde sa objaví ikona pre XApp status" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Výchozie nastavenie apletu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Stavový aplet aplikácií XApp" xapp-2.8.8/po/hi.po0000664000175000017500000001215314736763051013021 0ustar fabiofabio# Hindi translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-12-03 14:23+0000\n" "Last-Translator: Panwar \n" "Language-Team: Hindi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "पसंदीदा" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "असमर्थित कार्य" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "आइकन आकार" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "इच्छित आइकन आकार।" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "आइकन" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "आइकन हेतु स्ट्रिंग।" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "श्रेणी" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "डिफ़ॉल्ट श्रेणी।" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "कार्य" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "अनुप्रयोग" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "श्रेणियाँ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "उपकरण" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "प्रतीक" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "इमोजी" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME प्रकार" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "स्थान" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "स्थिति" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "अन्य" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "आइकन चुनें" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "खोजें" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "ब्राउज़ करें" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "लोड हो रहा है..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "डिफ़ॉल्ट" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "चुनें" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "रद्द करें" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "पथ स्वीकृत करें" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "पथ स्वीकृत करें या नहीं।" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "डिफ़ॉल्ट आइकन" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "डिफ़ॉल्ट उपयोग हेतु आइकन" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "चित्र फाइल चुनें" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "खोलें" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "चित्र" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "बारे में" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp स्थिति हेतु आइकन क्षेत्र" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp स्थिति एप्लेट फैक्ट्री" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp स्थिति एप्लेट" xapp-2.8.8/po/te.po0000664000175000017500000001263114736763051013032 0ustar fabiofabio# Telugu translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-09-17 15:43+0000\n" "Last-Translator: B.Laxmi koundinya \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "ఇష్టమైనవి" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "ఆపరేషన్ మద్దతు లేదు" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "ఐకాన్ పరిమాణం" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "ప్రాధాన్యత ఐకాన్ పరిమాణం." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ఐకాన్" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "చిహ్నాన్ని సూచించే స్ట్రింగ్." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "వర్గం" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "డిఫాల్ట్ వర్గం." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "చర్యలు" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "అనువర్తనాలు" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "వర్గాలు" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "పరికరాలు" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "చిహ్నాలు" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ఎమోజి" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "మైమ్ రకాలు" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "స్థలాలు" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "స్థితి" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "ఇతర" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "చిహ్నాన్ని ఎంచుకోండి" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "శోధించండి" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "అన్వేషించుము" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "లోడ్ అవుతోంది..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "డిఫాల్ట్" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "ఎంచుకోండి" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "రద్దు చేయి" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "మార్గాలను అనుమతించండి" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "మార్గాలను అనుమతించాలా వద్దా." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "డిఫాల్ట్ చిహ్నం" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "డిఫాల్ట్‌గా ఉపయోగించాల్సిన చిహ్నం" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "ఇమేజ్ ఫైల్‌ని ఎంచుకోండి" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "తెరవండి" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "గురించి" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp స్థితి చిహ్నాలు కనిపించే ప్రాంతం" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp స్థితి ఆప్లెట్ ఫ్యాక్టరీ" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp స్థితి ఆప్లెట్" xapp-2.8.8/po/ia.po0000664000175000017500000001113014736763051013004 0ustar fabiofabio# Interlingua translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2023-12-23 05:20+0000\n" "Last-Translator: eduver \n" "Language-Team: Interlingua \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritos" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operation non supportate" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Dimensiones del Icone" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Le dimension preferite del icone." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icone" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Le catena de characteres que representa le icone." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Le categoria predefinite" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actiones" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applicationes" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorias" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositivos" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Typos de mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locos" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stato" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Altere" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Elige un icone" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Cercar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Navigar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Cargamento..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predefinite" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seliger" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancellar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Consentir le percursos" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Si consentir le percursos." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icone predefinite" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Le icone de uso predefinite" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Seliger le file de imagine" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Aperir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imagine" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "A proposito" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area ubi appare le icone de stato de XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabrica de applet XApp Status" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet de stato XApp" xapp-2.8.8/po/la.po0000664000175000017500000001102714736763051013014 0ustar fabiofabio# Latin translation for linuxmint # Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-06-10 10:19+0000\n" "Last-Translator: Davide Novemila \n" "Language-Team: Latin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: la\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Praeposita" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operatio non tolerata" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Amplitudo iconum" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Praeposita amplitudo iconum." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Stringa iconem figurans." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Genus" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Genus praedesignatum." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actiones" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applicationes" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Genera" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Apparatus" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemata" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emotica" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime typi" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Loci" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Alia" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Iconem elige" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Quaere" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Naviga" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Legitur ..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Praedesignata" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Elige" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Interrumpe" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Itinera Permitte" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Si itinera permittuntur." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icon praedesignata" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Icon si alia non electa" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Plica imaginis elige" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Aperi" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imago" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Circa" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area ubi XApp icon status apparet" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Miniapplicationis XApp Status Officina" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Miniapplicatio XApp Status" xapp-2.8.8/po/ja.po0000664000175000017500000001145714736763051013021 0ustar fabiofabio# Japanese translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2023-12-02 11:03+0000\n" "Last-Translator: kmyyfz8q \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: ja\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "お気に入り" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "操作がサポートされていません" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "アイコンのサイズ" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "推奨されるアイコンの大きさです。" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "アイコン" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "アイコンを表す文字列です。" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "カテゴリ" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "既定のカテゴリです。" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "アクション" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "アプリケーション" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "カテゴリ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "デバイス" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "エンブレム" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "絵文字" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME タイプ" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "場所" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "状態" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "その他" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "アイコンを選択" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "検索" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "参照" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "読み込んでいます..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "既定" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "選択" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "キャンセル" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "パスを許可" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "パスを許可するかどうかです。" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "既定のアイコン" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "既定で使用するアイコンです" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "画像ファイルを選択" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "開く" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "画像" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "このアプリケーションについて" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp の状態アイコンが表示される場所です" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp の状態アプレットファクトリー" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp の状態アプレット" xapp-2.8.8/po/ko.po0000664000175000017500000001116614736763051013035 0ustar fabiofabio# Korean translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-12-14 23:02+0000\n" "Last-Translator: Changmin Jang \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "즐겨찾기" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "지원되지 않는 작업입니다" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "아이콘 크기" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "좋아하는 아이콘 크기입니다." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "아이콘" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "아이콘을 표시하는 문자열입니다." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "카테고리" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "기본 카테고리입니다." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "동작" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "애플리케이션" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "카테고리" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "장치" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "엠블럼" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "이모지" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime 형식" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "위치" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "상태" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "기타" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "아이콘 선택" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "검색" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "탐색" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "불러오고 있습니다..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "기본값" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "선택" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "취소" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "경로 허용" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "경로 허용 여부 결정." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "기본 아이콘" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "기본으로 사용할 아이콘" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "이미지 파일 선택" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "열기" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "이미지" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "정보" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp 상태 아이콘이 나타나는 영역" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp 상태 애플릿 팩토리" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp 상태 애플릿" xapp-2.8.8/po/fa.po0000664000175000017500000001173614736763051013015 0ustar fabiofabio# Persian translation for linuxmint # Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2023. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2023-09-17 13:45+0000\n" "Last-Translator: Mr.Ravi \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: fa\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "علاقه‌مندی‌ها" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "عملیات پشتیبانی نمی‌شود" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "اندازه نماد" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "اندازه نماد ترجیحی." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "نماد" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "رشته نشان دهنده نماد." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "دسته‌بندی" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "دسته بندی پیش‌فرض." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "اقدامات" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "برنامه‌ها" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "دسته‌بندی‌ها" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "دستگاه‌ها" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "نشانها" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "شکلک" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "انواع اداگر ها" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "مکان‌ها" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "وضعیت‌‌" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "موارد دیگر" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "یک نماد انتخاب کنید" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "جستجو" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "مرور کردن" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "درحال بارگذاری..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "پیش‌فرض" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "انتخاب" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "لغو" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "مجاز کردن مسیر ها" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "که آیا به مسیر ها اجازه داده شود." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "نماد پیش‌فرض" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "نمادی که به عنوان پیش‌فرض استفاده شود" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "فایل تصویر را انتخاب کنید" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "بازکردن" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "تصویر" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "درباره" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "مکانی که نمادهای وضعیت XApp ها نمایان میشوند" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "کارخانه برنامک وضعیت XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "برنامک وضعیت XApp" xapp-2.8.8/po/bg.po0000664000175000017500000001207314736763051013012 0ustar fabiofabio# Bulgarian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-09-20 20:21+0000\n" "Last-Translator: Nikolay Trifonov \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Любими" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Действието не се поддържа" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Размер на иконите" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Предпочитан размер на иконките." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Иконка" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Реда представящ иконката." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Категория" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Категория по подразбиране." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Действия" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Приложения" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Категории" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Устройства" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Емблеми" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Емоджи" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime типове" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Места" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Състояние" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Други" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Избор на иконка" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Търсене" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Преглед" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Зареждане..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Подразбиране" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Избери" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Отказ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Разреши път" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Дали да се резреши път." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Икона по подразбиране" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Иконка която ще се използва по подразбиране" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Избор на файл с изображение" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Отвори" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Образ" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Относно" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Зона където Xapp иконката за състояние ще се показва" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Съставяне на Xapp аплет на състоянието" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Xapp аплет на състоянието" xapp-2.8.8/po/sr@latin.po0000664000175000017500000001111714736763051014174 0ustar fabiofabio# Serbian Latin translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-26 18:35+0000\n" "Last-Translator: Saša Marjanović \n" "Language-Team: Serbian Latin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Omiljeno" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Radnja nije podržana" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Veličina ikona" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Preferisana veličina ikona." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Niz koji predstavlja ikonu." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorija" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Podrazumevana kategorija." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Radnje" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikacije" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorije" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Uređaji" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Amblemi" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emodžiji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME tipovi" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Mesta" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stanje" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Drugo" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Izaberi ikonu" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Potraži" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Pretraži" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Učitavanje..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Podrazumevano" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Izaberi" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Otkaži" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Dozvoli putanje" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Da li da dozvoli putanje." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Podrazumevana ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikona koja će se koristiti kao podrazumevana" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Izaberi datoteku slike" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Otvori" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Slika" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O programu" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zona gde se pojavljuju ikone statusa XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp programče stanja fabrički" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp programče stanja" xapp-2.8.8/po/sr.po0000664000175000017500000001223514736763051013046 0ustar fabiofabio# Serbian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # Мирослав Николић , 2020. msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-28 22:16+0000\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: sr\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Омиљено" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Радња није подржана" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Величина иконице" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Жељена величина иконице." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Иконица" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Унос који представља иконицу." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Категорија" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Подразумевана категорија." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Радње" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Апликације" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Категорије" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Уређаји" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Обележја" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Смешкићи" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Миме врсте" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Локације" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Стање" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Остало" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Изаберите икону" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Претрага" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Погледај" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Учитавање..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Подразумевано" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Изаберите" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Одустани" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Дозволите путању" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Требало би дозволити путању." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Подразумевана икона" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Иконица која се користи по подразумевано" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Изаберите датотеку слике" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Отвори" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Слика" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "О програму" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Подручје одакле потиче XApp иконица стања" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Фабрика „XApp“ програмчета стања" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "„XApp“ програмче стања" xapp-2.8.8/po/zgh.po0000664000175000017500000001054514736763051013214 0ustar fabiofabio# Standard Moroccan Tamazight translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-05-01 07:05+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Standard Moroccan Tamazight \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "ⵜⵉⵖⵣⵉ ⵏ ⵜⴳⵏⵉⵜ" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ⵜⵉⴳⵏⵉⵜ" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "ⵜⵉⴳⴰⵡⵉⵏ" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "ⵜⵉⵙⵏⵙⵉⵡⵉⵏ" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "ⵉⵙⵎⵉⵍⵏ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "ⴰⵍⵍⴰⵍⵏ" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ⵉⵎⵓⵊⵉ" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "ⵉⴷⵖⴰⵔⵏ" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "ⴰⴷⴷⴰⴷ" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "ⵢⴰⴹⵏ" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "ⵔⵣⵓ" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "ⴰⵣⴷⴰⵎ..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "ⵙⵜⵢ" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "ⵙⵔ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "ⵕⵥⵎ" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "ⵜⴰⵡⵍⴰⴼⵜ" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "ⵖⴼ" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/et.po0000664000175000017500000001077114736763051013035 0ustar fabiofabio# Estonian translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-10-05 09:30+0000\n" "Last-Translator: vaba \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Lemmikud" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Toiming ei ole toetatud" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikooni suurus" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Eelistatud ikooni suurus." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikoon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Sõne, mis viitab ikoonile." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategooria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Vaikimisi kategooria." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Tegevused" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Rakendused" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategooriad" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Seadmed" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Embleemid" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emotikonid" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME-tüübid" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Asukohad" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Olek" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Muud" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Ikooni valimine" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Otsing" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Lehitse" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Laadimine..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Vaikimisi" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Vali" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Loobu" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Asukohtade lubamine" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Kas asukohad lubada." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Vaikeikoon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Vaikimisi kasutatav ikoon" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Vali pildi fail" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ava" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Pilt" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Lähemalt" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Piirkond, kus XApp olekuikoone näidatakse" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp olekuikoonide rakend" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp olekuikoonide rakend" xapp-2.8.8/po/pt_BR.po0000664000175000017500000001114514736763051013427 0ustar fabiofabio# Brazilian Portuguese translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-12-10 15:42+0000\n" "Last-Translator: Gilberto vagner \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritos" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operação não suportada" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Tamanho do ícone" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "O tamanho de ícone preferido" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ícone" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "O texto representando o ícone." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "A categoria padrão." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Ações" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicativos" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorias" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositivos" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipos MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locais" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Outros" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Escolha um ícone" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Pesquisar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Navegar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Carregando…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Padrão" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Selecionar" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancelar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Caminhos Permitidos" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Se necessário permitir caminhos." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Ícone padrão" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "O ícone para uso padrão" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Selecionar arquivo da imagem" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Abrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imagem" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Sobre" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "A área onde o ícone do XApp status aparecerá" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fábrica do Applet XApp Status" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet XApp Status" xapp-2.8.8/po/kk.po0000664000175000017500000001070414736763051013026 0ustar fabiofabio# Kazakh translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-03-18 03:19+0000\n" "Last-Translator: Murat Käribay \n" "Language-Team: Kazakh \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Таңбаша өлшемі" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Таңбаша" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Санат" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Әрекеттер" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Қолданбалар" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Санаттар" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Құрылғылар" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Эмблемалар" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Эмоджи" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME түрлері" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Орындар" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Қалып-күйі" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Басқа" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Таңбашаны таңдаңыз" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Іздеу" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Қарап шығу" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Жүктеу..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Әдепкі" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Таңдау" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Бас тарту" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Әдепкі таңба" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ашу" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Сурет" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Бағдарлама туралы" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/hr.po0000664000175000017500000001103214736763051013025 0ustar fabiofabio# Croatian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-28 11:18+0000\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Omiljeno" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Radnja nije podržana" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Veličina ikona" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Željena veličina ikona." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Unos koji predstavlja ikonu." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorija" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Zadana kategorija." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Radnje" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikacije" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorije" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Uređaji" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Obilježja" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Smajliji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime vrste" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lokacije" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stanje" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Ostalo" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Odaberi ikonu" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Pretraži" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Pregledaj" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Učitavanje..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Zadano" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Odaberi" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Odustani" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Dopusti putanje" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Treba li dopustiti putanje." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Zadana ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikona koja se koristi po zadanome" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Odaberi datoteku slike" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Otvori" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Slika" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O programu" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Područje gdje nastaje XApp ikona stanja" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Tvornica XApp apleta stanja" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp aplet stanja" xapp-2.8.8/po/ro.po0000664000175000017500000001115414736763051013041 0ustar fabiofabio# Romanian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-12-20 10:45+0000\n" "Last-Translator: Dorian Baciu \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Preferințe" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operația nu este acceptată" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Mărime pictogramă" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Dimensiunea preferată a pictogramei." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Pictogramă" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Șirul reprezentând pictograma." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Categoria implicită." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Acțiuni" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicații" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorii" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispozitive" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Embleme" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipuri MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locații" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stare" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Alte" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Alege o pictogramă" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Căutare" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Navigare" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Se încarcă..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Implicit(ă)" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Selectare" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Anulare" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permite căi" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Fie pentru a permite căi." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Pictogramă implicită" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Pictograma pentru a fi folosită implicit" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Selectare fişier imagine" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Deschide" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imagine" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Despre" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zona în care apar pictogramele de stare XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Zona în care apar pictogramele de stare XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/bn.po0000664000175000017500000001307714736763051013026 0ustar fabiofabio# Bengali translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-01-27 09:24+0000\n" "Last-Translator: Fahim Shahriar \n" "Language-Team: Bengali \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "পছন্দসমূহ" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "অপারেশন সমর্থিত নয়" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "আইকনের আয়তন" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "পছন্দসই আইকন আকার" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "আইকন" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "যে স্ট্রিংটি আইকনটাকে উপস্থাপন করছে।" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "শ্রেণীবিভাগ" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "মৌল শ্রেণীবিভাগ।" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "ক্রিয়াকলাপ" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "অ্যাপ্লিকেশনসমূহ" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "শ্রেণীবিভাগ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "ডিভাইসসমূহ" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "প্রতীকচিহ্নসমূহ" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ইমোজি" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "মাইম টাইপসমূহ" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "স্থান সমূহ" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "অবস্থা" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "অন্যান্য" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "একটি আইকন নির্বাচন করুন" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "অনুসন্ধান করুন" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "ব্রাউজ করুন" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "লোড হচ্ছে..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "মৌল মান" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "নির্বাচন করুন" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "বাতিল করুন" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "পাথস(Paths) অনুমতি দিন" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "পাথস(Paths) অনুমতি দিতে হবে কিনা।" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "মৌল আইকন" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "মৌলরূপে(Default) ব্যবহার করার জন্য আইকন" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "ইমেজ ফাইল নির্বাচন করুন" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "খুলুন" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "ছবি" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "পরিচিতি" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "এক্স-অ্যাপ স্টেটাস আইকন উপস্থিতির অঞ্চল" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "এক্স-অ্যাপ স্ট্যাটাস অ্যাপলেট ফ্যাক্টরি" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "এক্স-অ্যাপ স্ট্যাটাস অ্যাপলেট" xapp-2.8.8/po/br.po0000664000175000017500000001054714736763051013031 0ustar fabiofabio# Breton translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-07-14 14:45+0000\n" "Last-Translator: Anthony Guechoum \n" "Language-Team: Breton \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Ma re well ganin" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ment an arlunioù" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Arlun" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Rummad" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Ar rummad dre ziouer" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Arloadoù" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Rummadoù" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Trobarzhelloù" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Sielloù" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stad" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "All" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Dibab un arlun" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Klask" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Furchal" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "O kargañ..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Dre ziouer" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Diuzañ" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Nullañ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Aotren an hentoù" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Arlun dre ziouer" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "An arlun a vez implijet dre ziouer" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Diuz ur rest skeudenn" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Digeriñ" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Skeudenn" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Diwar-benn" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Arloadig stad XApp" xapp-2.8.8/po/id.po0000664000175000017500000001074714736763051013024 0ustar fabiofabio# Indonesian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-05-07 03:23+0000\n" "Last-Translator: Arief Setiadi Wibowo \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favorit" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operasi tak didukung" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ukuran ikon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Ukuran ikon yang disarankan." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "String yang mewakili ikon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Kategori baku." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Aksi" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikasi" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategori" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Perangkat" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblem" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipe mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Tempat" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Lainnya" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Pilih ikon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Cari" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Telusur" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Memuat..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Baku" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Pilih" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Batal" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Ijinkan Path" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Apakah mengizinkan path." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Ikon Baku" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikon yang akan digunakan secara baku" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Pilih berkas citra" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Buka" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Citra" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Perihal" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area dimana ikon status XApp muncul" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Pabrik Applet Status XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet Status XApp" xapp-2.8.8/po/kab.po0000664000175000017500000001104614736763051013156 0ustar fabiofabio# Kabyle translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-27 18:26+0000\n" "Last-Translator: Yacine Bouklif \n" "Language-Team: Kabyle \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Inurifen" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Tamhelt ur tettwadhel ara" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Tiddi n tignit" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tiddi tanuraft n tignit." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Tignit" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Azrar ara yesenkden tignit." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Taggayt" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Taggayt n lexṣas" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Tigawin" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Isnasen" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Taggayin" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Ibenkan" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Izamulen" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Tignit n uḥulfu" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Anawen mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Isunen" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Addad" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Wayeḍ" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Fren tagnit" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Nadi" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Snirem" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Tulya..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Lexṣas" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Fren" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Sefsex" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Sireg iberdan" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ma yella ad tsirgeḍ iberdan." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Tignit n lexṣas" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Tignit ara tesqedceḍ s lexṣas" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Fren afaylu n tugna" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ldi" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Tugna" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Ɣef" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Tamnaḍt anida ara d-banent tignitin n uẓayer XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Taneɣraft n yisnasen n waddad XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Asnas n uẓayer XApp" xapp-2.8.8/po/el.po0000664000175000017500000001214514736763051013022 0ustar fabiofabio# Greek translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2023-05-08 13:07+0000\n" "Last-Translator: Aster Bandis \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Αγαπημένα" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Η λειτουργία δεν υποστηρίζεται" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Μέγεθος εικονιδίων" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Το προτιμώμενο μέγεθος εικονιδίου." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Εικονίδιο" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Το κείμενο που αντιπροσωπεύει το εικονίδιο." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Κατηγορία" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Η προεπιλεγμένη κατηγορία." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Ενέργειες" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Εφαρμογές" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Κατηγορίες" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Συσκευές" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Εμβλήματα" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Τύποι Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Τοποθεσίες" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Κατάσταση" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Άλλα" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Επιλογή εικονιδίου" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Aναζήτηση" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Περιήγηση" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Φόρτωση..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Προεπιλογή" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Επιλέξτε" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Ακύρωση" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Αποδοχή διαδρομών" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Επιλέξτε αν θα επιτρέπονται διαδρομές." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Προεπιλεγμένο Εικονίδιο" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Προκαθορισμένο εικονίδιο" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Επιλογή αρχείου εικόνας" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Άνοιγμα" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Εικόνα" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Περί" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Περιοχή εμφάνισης των εικονιδίων κατάστασης XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Κατασκευή μικροεφαρμογής XApp Status" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Μικροεφαρμογή XApp Status" xapp-2.8.8/po/ca.po0000664000175000017500000001110514736763051013000 0ustar fabiofabio# Catalan translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-25 18:47+0000\n" "Last-Translator: Isidro Pisa \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favorits" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operació no admesa" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Mida de la icona" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La mida preferida de la icona." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La cadena que representa la icona." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La categoria predeterminada." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Accions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicacions" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositius" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemes" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipus MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Llocs" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Estat" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Altres" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Seleccioneu una icona" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Cerca" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Navega" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "S'està carregant..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predeterminada" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Selecciona" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Cancel·la" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permet camins" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Si es permeten camins o no." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icona predeterminada" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "La icona usada per defecte" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Selecciona el fitxer d'imatge" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Obre" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imatge" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Quant a" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Àrea on es mostren les icones d'estat de XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Status Applet Factory" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/nb.po0000664000175000017500000001077414736763051013027 0ustar fabiofabio# Norwegian Bokmal translation for linuxmint # Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-07-09 12:38+0000\n" "Last-Translator: André Savik \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritter" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operasjonen er ikke støttet" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikonstørrelse" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Foretrukket ikonstørrelse" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Tekst som beskriver ikonet" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Standardkategori" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Handlinger" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applikasjoner" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorier" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Enheter" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemer" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mimetyper" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Steder" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Annet" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Velg et ikon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Søk" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Bla gjennom" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Laster …" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Standard" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Velg" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Avbryt" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Tillat filbaner" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Om filbaner skal tillates" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Standardikon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikonset som brukes som forvalg" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Velg bildefil" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Åpne" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Bilde" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Om" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Området hvor XApps statusikoner vises" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Kilde for XApp-status-app" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp-status-app" xapp-2.8.8/po/fil.po0000664000175000017500000001106514736763051013174 0ustar fabiofabio# Filipino translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-12-02 17:12+0000\n" "Last-Translator: Jonel A. Agutaya \n" "Language-Team: Filipino \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Mga Paborito" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Hindi suportadong operasyon" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Sukat ng icon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "And kursonadang sukat ng icon." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Mga katagang kumakatawan sa icon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorya" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Ang kusang kategorya." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Mga Aksyon" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Mga Aplikasyon" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Mga Kategorya" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Mga Device" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblems" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime types" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Mga Lugar" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Kalagayan" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Iba pa" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Pumili ng icon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Maghanap" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Magbasa-basa" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Kumakarga..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Kusa" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Pumili" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Ikansela" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Allow Paths" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Whether to allow paths." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Ang kusang icon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ang kusang icon na gagamitin" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Pumili ng larawang file" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Buksan" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imahe" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Patungkol" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Ang banda kung saan lumitaw ang XApp status icons" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Status Applet Factory" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Status Applet" xapp-2.8.8/po/pl.po0000664000175000017500000001104314736763051013031 0ustar fabiofabio# Polish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-11-28 21:57+0000\n" "Last-Translator: Marek Adamski \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Ulubione" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operacja nieobsługiwana" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Rozmiar ikon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Preferowana wielkość ikon." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Ciąg znaków reprezentujący ikonę." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Kategoria domyślna." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Czynności" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Programy" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorie" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Urządzenia" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Symbole" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Typy MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Miejsca" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stan" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Inne" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Wybór ikony" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Wyszukaj" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Przeglądaj" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Wczytywanie…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Domyślny" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Wybierz" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Anuluj" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Zezwalaj na ścieżki" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Czy zezwalać na ścieżki." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Domyślna ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Domyślnie używana ikona" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Wybierz plik graficzny" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Otwórz" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Obraz" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O programie" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Obszar, w którym pokazują się ikony stanu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Generator apletu stanu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Aplet stanu XApp" xapp-2.8.8/po/ca@valencia.po0000664000175000017500000001012614736763051014605 0ustar fabiofabio# Catalan (Valencian) translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2019-02-15 19:18+0000\n" "Last-Translator: Juan Hidalgo-Saavedra \n" "Language-Team: Catalan (Valencian) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/hu.po0000664000175000017500000001057714736763051013045 0ustar fabiofabiomsgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-12-05 18:22+0000\n" "Last-Translator: KAMI \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: hu\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Kedvencek" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "A művelet nem támogatott" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikonméret" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Az ikon mérete." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Az ikon megnevezése." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategória" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Alapértelmezett kategória" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Műveletek" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Alkalmazások" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategóriák" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Eszközök" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblémák" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emodzsi" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME-típusok" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Helyek" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Állapot" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Egyéb" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Válasszon ikont" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Keresés" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Tallózás" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Betöltés…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Alapértelmezett" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Kiválasztás" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Mégse" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Megengedett elérési útvonalak" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Engedélyezze a további elérési útvonalakat." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Alapértelmezett ikon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Az alapértelmezetten használt ikon" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Válasszon képfájlt" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Megnyitás" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Kép" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Névjegy" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Terület, ahol az XApp állapot ikonok megjelennek" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Állapot kisalkalmazás terület" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Állapot kisalkalmazás" xapp-2.8.8/po/is.po0000664000175000017500000001113714736763051013035 0ustar fabiofabio# Icelandic translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-01-12 17:39+0000\n" "Last-Translator: Sveinn í Felli \n" "Language-Team: Icelandic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Eftirlæti" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Aðgerðin er ekki studd" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Táknmyndastærð" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Kjörstærð táknmyndar." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Táknmynd" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Textastrengurinn sem stendur fyrir táknmyndina." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Flokkur" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Sjálfgefinn flokkur." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Aðgerðir" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Forrit" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Flokkar" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Tæki" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Merkimiðar" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Tjáningartákn - emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME tegundir" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Staðir" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Staða" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Annað" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Veldu táknmynd" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Leita" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Flakka" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Hleð inn..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Sjálfgefið" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Velja" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Hætta við" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Leyfa slóðir" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Hvort leyfa eigi slóðir." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Sjálfgefin táknmynd" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Táknmyndin sem skal nota sjálfgefið" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Veldu myndskrá" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Opna" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Mynd" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Um hugbúnaðinn" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Svæði þar sem XApp stöðutákn birtast" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp stöðusmáforritasmiðja" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp stöðusmáforrit" xapp-2.8.8/po/sn.po0000664000175000017500000001006614736763051013042 0ustar fabiofabio# Shona translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-11-04 10:52+0000\n" "Last-Translator: Keith Matarutse \n" "Language-Team: Shona \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Zvofarirwa" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Mabasa" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/fi.po0000664000175000017500000001073614736763051013024 0ustar fabiofabio# Finnish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-06-17 12:05+0000\n" "Last-Translator: Kimmo Kujansuu \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Suosikit" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Toimintaa ei tueta" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Kuvakkeen koko" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Haluttu kuvakkeen koko." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Kuvake" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Kuvaketta kuvaava merkkijono." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Luokka" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Oletus luokka." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Toiminnot" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Sovellukset" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Luokat" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Laitteet" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Tunnukset" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Hymiö" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime tyypit" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Sijainnit" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Tila" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Muut" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Valitse kuvake" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Haku" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Selaa" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Ladataan..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Oletus" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Valitse" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Peruuta" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Salli polut" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Tuleeko polut sallia." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Oletuskuvake" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Oletuksena käytettävä kuvake" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Valitse kuvatiedosto" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Avaa" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Kuva" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Tietoja" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Alue, jossa xapp-kuvakkeet näkyvät" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Sovelma xapp toimintatila" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Toimintatila xapp" xapp-2.8.8/po/sl.po0000664000175000017500000001105514736763051013037 0ustar fabiofabio# Slovenian translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-09-25 13:25+0000\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Priljubljeni" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Opravilo ni podprto" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Velikost ikon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Željena velikost ikon." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Niz ki predstavlja ikono." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorija" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Privzeta kategorija" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Dejanja" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikacije" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorije" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Naprave" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemi" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Čustveni simboli" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Vrste MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Mesta" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Drugo" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Izberi ikono" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Iskanje" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Brskaj" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Nalaganje ..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Privzeto" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Izberi" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Prekliči" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Dovoli Poti" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ali želite dovoliti poti." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Privzeta ikona" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Ikona, ki se bo uporabila privzeto" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Izberi slikovno datoteko" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Odpri" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Slika" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "O Programu" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Prostor, kjer se pojavi statusna ikona XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Tovarna programčkov stanja XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Programček stanja XApp" xapp-2.8.8/po/zh_HK.po0000664000175000017500000001070414736763051013424 0ustar fabiofabio# Chinese (Hong Kong) translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-06-25 14:56+0000\n" "Last-Translator: Robert K \n" "Language-Team: Chinese (Hong Kong) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "圖示大小" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "喜愛的圖標大小。" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "圖標" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "代表圖標的字符串。" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "類別" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "默認類別" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "命令" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "程式" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "分類" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "裝置" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "圖章" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "表情符號" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime 類型" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "位置" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "狀態" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "其他" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "選擇圖示" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "蒐索" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "瀏覽" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "載入中..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "預設值" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "選取" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "取消" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "允許路徑" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "是否允許路徑。" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "預設圖示" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "默認使用的圖標" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "選取圖像檔" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "打開" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "影像" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "關於" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp狀態圖標出現的區域" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp狀態小程序工廠" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp 狀態小工具" xapp-2.8.8/po/fr.po0000664000175000017500000001117714736763051013035 0ustar fabiofabio# French translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-12-30 20:14+0000\n" "Last-Translator: AO \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoris" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Cette opération n’est pas prise en charge" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Taille d’icône" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La taille d’icône souhaitée." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icône" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La chaîne qui représente l’icône." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Catégorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La catégorie par défaut" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applications" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Catégories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Appareils" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblèmes" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Émoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Types MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lieux" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "État" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Autre" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Choisissez une icône" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Chercher" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Parcourir" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Chargement..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Valeurs par défaut" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Choisir" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Annuler" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Autoriser les chemins d’accès" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Autoriser ou non les chemins d’accès." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icône par défaut" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "L’icône à utiliser par défaut" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Choisir un fichier image" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ouvrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "À propos" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zone où les icônes d’état XApp apparaissent" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabrique d'applets d’état XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet d’état XApp" xapp-2.8.8/po/az.po0000664000175000017500000001056414736763051013037 0ustar fabiofabio# Azerbaijani translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2019-05-15 17:29+0000\n" "Last-Translator: Nasimi Taghizade \n" "Language-Team: Azerbaijani \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Icon ölçüsü" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tərcih edilən ikon ölçüsü." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "İkon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "İkonu təmsil edən sətir." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Tədbirlər" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Programlar" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kateqoriyalar" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Qurğular" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemlər" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emojilər" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime növləri" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Yerlər" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Digər" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "İkona seçin" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Axtarış" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Axtar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Yuklənmə gedir" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seç" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "İmtina" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Axtarış yoluna icazə ver" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Axtarış yoluna icazə verilsinmi." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "İmaj faylını sec" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Açın" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "İmaj" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/ka.po0000664000175000017500000001122614736763051013014 0ustar fabiofabio# Georgian translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-06-13 08:25+0000\n" "Last-Translator: Romeo Khazalia \n" "Language-Team: Georgian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "ხატულას ზომა" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ხატულა" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "კატეგორია" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "მოქმედებები" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "აპლიკაციები" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "კატეგორიები" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "მოწყობილობები" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "ემბლემები" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ემოჯი" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME ტიპები" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "ადგილები" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "სტატუსი" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "სხვა" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "ხატულის არჩევა" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "ძებნა" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "დათვალიერება" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "იტვირთება..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "ნაგულისხმები" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "მონიშვნა" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "გაუქმება" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "გახსნა" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "გამოსახულება" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "შესახებ" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/eu.po0000664000175000017500000001106514736763051013033 0ustar fabiofabio# Basque translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-28 12:46+0000\n" "Last-Translator: Asier Iturralde Sarasola \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Gogokoak" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Eragiketa ez da onartzen" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikonoaren tamaina" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Hobetsitako ikono tamaina" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikonoa" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Ikonoa adierazten duen katea." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Kategoria lehenetsia" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Ekintzak" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikazioak" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategoriak" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Gailuak" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Ikurrak" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emojiak" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime motak" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lekuak" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Egoera" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Bestelakoak" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Aukeratu ikono bat" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Bilatu" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Arakatu" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Kargatzen..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Lehenetsia" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Hautatu" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Utzi" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Onartu bideak" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Bideak onartu behar diren ala ez." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Ikono lehenetsia" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Modu lehenetsian erabiliko den ikonoa" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Hautatu irudi-fitxategia" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Ireki" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Irudia" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Honi buruz" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp egoera ikonoak agertuko diren tokia" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp Egoera applet faktoria" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp Egoera applet-a" xapp-2.8.8/po/eo.po0000664000175000017500000001111514736763051013021 0ustar fabiofabio# Esperanto translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-03-04 16:22+0000\n" "Last-Translator: Piet Coppens \n" "Language-Team: Esperanto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Plej ŝatataj" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operacio ne subtenata" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Bildsimbola grando" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La preferita bildsimbola grando." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Bildsimbolo" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La ĉeno, kiu prezentas la bildsimbolon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorio" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La defaŭlta kategorio." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Agoj" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikaĵoj" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorioj" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Aparatoj" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemoj" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoĝio" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime-tipoj" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Lokoj" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stato" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Alia" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Elektu bildsimbolon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Serĉi" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Foliumi" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Ŝargado..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Defaŭlto" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Elekti" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Nuligi" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permesi dosierindikojn" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ĉu permesi dosierindikojn." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Defaŭlta bildsimbolo" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "La bildsimbolo uzita defaŭlte" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Elektu bildodosieron" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Malfermi" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Bildo" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Pri" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Areo, kie aperas bildsimboloj pri xapa stato" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabriko por aplikaĵeto pri xapa stato" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Aplikaĵeto pri xapa stato" xapp-2.8.8/po/he.po0000664000175000017500000001137214736763051013017 0ustar fabiofabio# Hebrew translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-07-27 09:07+0000\n" "Last-Translator: Avi Markovitz \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "מועדפים" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "פעולה לא נתמכת" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "גודל סמל" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "גודל הסמל המועדף." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "סמל" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "המחרוזת שמייצגת את הסמל." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "קטגוריה" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "קטגורית ברירת המחדל." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "פעולות" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "יישומונים" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "קטגוריות" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "התקנים" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "סמלונים" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "אימוג׳י" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "סוגי MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "מקומות" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "מצב" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "אחר" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "בחירת סמל" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "חיפוש" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "עיון" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "בהליכי טעינה..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "ברירת מחדל" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "בחירה" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "ביטול" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "לאפשר נתיבים" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "האם לאפשר נתיבים." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "סמל ברירת מחדל" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "סמל לשימוש כברירת מחדל" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "בחירת קובץ תמונה" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "פתיחה" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "תמונה" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "על אודות" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "אזור שבו יופיעו סמלי מצב XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "מצב מפעל יישומוני XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "יישומון מצב XApp" xapp-2.8.8/po/oc.po0000664000175000017500000001116014736763051013017 0ustar fabiofabio# Occitan (post 1500) translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-12-12 11:26+0000\n" "Last-Translator: Quentin PAGÈS \n" "Language-Team: Occitan (post 1500) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favorits" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operacion pas presa en carga" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Talha d'icòna" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La talha d’icòna preferida." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icòna" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Lo tèxt representant l’icòna." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Categoria per defaut." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Accions" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicacions" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorias" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Periferics" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblèmas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipes MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Emplaçaments" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Estat" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Autre" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Causir una icòna" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Recercar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Percórrer" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Cargament..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Per defaut" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seleccionar" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Anullar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permetre los camins" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Se cal permetre los camins." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icòna per defaut" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "L’icòna d’utilizar per defaut" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Seleccionar un fichièr imatge" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Dobrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imatge" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "A prepaus" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zòna ont las icònas d’estat Xapp apareisson" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabrica d’applets d’estat XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet d’estat XApp" xapp-2.8.8/po/ber.po0000664000175000017500000001056314736763051013174 0ustar fabiofabio# Berber (Other) translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-09-19 07:20+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Berber (Other) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ⵜⴰⵢⴽⵓⵏⵜ" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "ⴰⵙⵎⵉⵍ" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "ⵜⵉⵙⵏⵙⵉⵡⵉⵏ" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "ⵉⵙⵎⵉⵍⵏ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "ⴰⵍⵍⴰⵍⵏ" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ⵉⵎⵓⵊⵉ" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "ⵉⴷⵖⴰⵔⵏ" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "ⴰⴷⴷⴰⴷ" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "ⵢⴰⴹⵏ" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "ⴷⵖⵔ ⵢⴰⵜ ⵏ ⵜⴰⵢⴽⵓⵏⵜ" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "ⵔⵣⵓ" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "ⵙⵜⵢ" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "ⵙⵔ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "ⵙⵜⵢ ⴰⴼⴰⵢⵍⵓ ⵏ ⵜⵡⵍⴰⴼⵜ" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "ⵕⵥⵎ" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "ⵜⴰⵡⵍⴰⴼⵜ" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "ⵅⴼ" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/ku.po0000664000175000017500000001106114736763051013035 0ustar fabiofabio# Kurdish translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2023-08-17 22:14+0000\n" "Last-Translator: Sahin Elci \n" "Language-Team: Kurdish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Hemî Favorî" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Piştgiriya xebat nayê kirin" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Meznahiya ikonê" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Mezinatiya îkona bijartî" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Îkon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Rêya îkona tê temsîl kirin" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorî" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Kategoriya sereke" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Tevger" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Sepan" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Beş" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Cîhaz" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Nîşan" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Cureyên Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Cîh" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Rewş" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Wekî Din" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Hilbijartina îkon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Lê bigere" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Gerîn" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Tê barkirin..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Wekî heyî" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Hilbijêre" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Betal bike" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Destûrê bide Paths" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ma rê bidin rê." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Îkona Standard" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Îkona ku ji hêla xwerû ve tê bikar anîn" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Dosiya wêneyê hilbijêre" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Veke" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Wêne" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Der barê" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Qada ku îkonên rewşa XApp lê xuya dibin" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Rewşa Kargeha Aplikasyon a XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Aplikasyona Rewşê" xapp-2.8.8/po/ast.po0000664000175000017500000001103314736763051013204 0ustar fabiofabio# Asturian translation for linuxmint # Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2024. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-07-19 05:17+0000\n" "Last-Translator: Havi \n" "Language-Team: Asturian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoritos" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operación non sofitada" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Tamañu d'Iconu" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Tamañu d'iconu preferíu" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Iconu" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La cadena representa l'iconu" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Estaya" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Estaya predeterminada" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Aiciones" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplicaciones" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categoríes" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Preseos" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemes" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Fustaxes" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tribes MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Sitios" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Estáu" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Otros" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Esbillar un iconu" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Guetar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Restolar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Cargando…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predetermináu" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Esbillar" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Encaboxar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permitir rutes" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Permitir rutes" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Iconu por defeutu" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "L'iconu que va usase por defeutu" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Escoyer archivu d'imaxe" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Abrir" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imaxe" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Tocante a" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Zona ú se van amosar los iconos d'estáu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fábrica del applet d'estáu XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet d'estáu XApp" xapp-2.8.8/po/LINGUAS0000664000175000017500000000040314736763051013101 0ustar fabiofabioaf am ar ast az be ber bg bn br ca ca@valencia ckb cs cy da de el en_CA en_GB eo es et eu fa fi fil fr fr_CA he hi hr hu ia id ie is it ja ka kab kk ko ku la lt mai ms nb nl oc pl pt pt_BR ro ru sk sl sn sr sr@latin sv te th tr uk uz vi zgh zh_CN zh_HK zh_TW xapp-2.8.8/po/zh_CN.po0000664000175000017500000001074614736763051013430 0ustar fabiofabio# Chinese (Simplified) translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-01-08 10:52+0000\n" "Last-Translator: 张琦 \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "收藏" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "不支持该操作" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "图标大小" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "首选图标大小。" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "图标" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "代表图标的字符串。" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "分类" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "默认分类。" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "动作" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "应用程序" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "分类" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "设备" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "徽标" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME 类型" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "位置" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "状态" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "其他" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "选择一个图标" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "搜索" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "浏览" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "正在加载..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "默认" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "选择" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "取消" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "允许路径" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "是否允许路径。" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "默认图标" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "默认使用的图标" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "选择图像文件" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "打开" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "图像" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "关于" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "XApp 状态图标出现的区域" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp 状态小应用工厂" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp 状态小应用" xapp-2.8.8/po/lt.po0000664000175000017500000001116414736763051013041 0ustar fabiofabio# Lithuanian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2022-10-18 19:30+0000\n" "Last-Translator: Ernestas Karalius \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Mėgstamiausi" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operacija nepalaikoma" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Piktogramų dydis" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Pageidaujamas piktogramų dydis." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Piktograma" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Eilutė, atvaizduojanti piktogramą." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorija" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Numatytoji kategorija" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Veiksmai" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Programos" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorijos" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Įrenginiai" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemos" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Jaustukai" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime tipai" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Vietos" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Būsena" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Kita" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Pasirinkite piktogramą" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Ieškoti" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Naršyti" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Įkeliama..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Numatytoji" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Pasirinkti" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Atšaukti" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Leisti adresus" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ar leisti adresus" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Numatytoji piktograma" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Piktograma, kurią naudoti pagal numatymą" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Pasirinkite paveikslėlio failą" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Atidaryti" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Paveikslėlis" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Apie" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Sritis, kurioje atsiras XApp būsenos piktogramos" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp būsenos įskiepio gamykla" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp būsenos įskiepis" xapp-2.8.8/po/ms.po0000664000175000017500000001044014736763051013035 0ustar fabiofabio# Malay translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2019-09-30 03:27+0000\n" "Last-Translator: abuyop \n" "Language-Team: Malay \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Saiz ikon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Saiz ikon dikehendaki" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Rentetan yang mewakili ikon." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Tindakan" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Aplikasi" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategori" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Peranti" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Lambang" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Jenis Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Tempat" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Lain-lain" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Pilih satu ikon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Gelintar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Layar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Memuatkan..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Pilih" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Batal" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Benarkan Laluan" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Sama ada hendak membenarkan laluan." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Pilih fail imej" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Buka" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Imej" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/af.po0000664000175000017500000001076314736763051013014 0ustar fabiofabio# Afrikaans translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-06-08 07:08+0000\n" "Last-Translator: Shane Griffiths \n" "Language-Team: Afrikaans \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikoongrootte" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Die verkiesde ikoongrootte" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikoon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Die string wat die ikoon voorstel." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Die standaardkategorie." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Aksies" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Programme" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorieë" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Toestelle" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Embleme" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mime tipes" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Plekke" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Ander" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Kies 'n ikoon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Soektog" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Bespeur" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Besig om te laai..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Verstek" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Kies" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Kanselleer" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "laat paadjies toe" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Of om paaie toe te laat of nie." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Verstek Ikoon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Die Ikoon om standaard te gebruik" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Kies beeldlêer" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Maak Oop" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Beeld" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Oor" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Gebied waar XApp-statusikone verskyn" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp-statusapplet-fabriek" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp-statusapplet" xapp-2.8.8/po/sv.po0000664000175000017500000001104014736763051013043 0ustar fabiofabio# Swedish translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-26 00:03+0000\n" "Last-Translator: Jan-Olof Svensson \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Favoriter" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Stöd saknas för denna åtgärd" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Ikonstorlek" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Föredragen ikonstorlek." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Ikon" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Strängen som representerar ikonen." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Kategori" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Förvald kategori" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Åtgärder" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Program" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Kategorier" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Enheter" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblem" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emojier" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Mimetyper" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Platser" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Status" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Annan" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Välj en ikon" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Sök" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Bläddra" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Hämtar..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Standardvärde" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Välj" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Avbryt" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Tillåt sökvägar" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Om du vill tillåta sökvägar." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Förvald ikon" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Den ikon som används som standard" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Välj bildfil" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Öppna" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Bild" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Om" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Det område där XApp visar status-ikoner" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Verktyg för status-appen XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Status-appen XApp" xapp-2.8.8/po/ie.po0000664000175000017500000001072414736763051013020 0ustar fabiofabio# Interlingue translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-01-04 21:21+0000\n" "Last-Translator: Silvara \n" "Language-Team: Interlingue \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: ie\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Li preferet" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Li operation es ínsupportat" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Dimension de icon" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Li preferet dimension de icone." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icone" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Li catene representante li icone" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categorie" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Li predefinit categorie" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Actiones" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applicationes" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categories" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Aparates" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Emblemas" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "MIME-tipes" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Locs" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Statu" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Altri" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Selecte un icone" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Serchar" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Trovar" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Cargante..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predefinit" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Selecter" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Anullar" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Permisser rutes" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Ca permisser rutes." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Li predefinit icone" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Li predefinit icone." #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Selecte un file de image" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Aperter" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Image" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Pri" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "" xapp-2.8.8/po/uk.po0000664000175000017500000001170214736763051013037 0ustar fabiofabio# Ukrainian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-05-15 08:00+0000\n" "Last-Translator: Mykola Tkach \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Улюблені" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Дія не підтримується" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Розмір іконки" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Бажаний розмір іконки." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Іконка" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Рядок, який представляє іконку." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Категорія" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Типова категорія." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Дії" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Додатки" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Категорії" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Пристрої" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Емблеми" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Емодзі" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Типи MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Місця" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Стан" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Інше" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Оберіть піктограму" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Пошук" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Перегляд" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Завантаження..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Типово" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Обрати" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Скасувати" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Дозволяти шляхи" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Чи дозволяти шляхи." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Типова піктограма" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Піктограма, яка використовується усталено" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Обрати файл зображення" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Відкрити" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Зображення" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Про" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Ділянка, де з'являється піктограма статусу XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Фабрика аплета статусу XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Аплет статусу XApp" xapp-2.8.8/po/ar.po0000664000175000017500000001157614736763051013033 0ustar fabiofabio# Arabic translation for linuxmint # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-01-16 17:27+0000\n" "Last-Translator: sheesh213 \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" "Language: ar\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "المفضلات" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "عمليّة غير مدعومة" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "حجم الأيقونة" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "حجم الأيقونة المفضل" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "الأيقونة" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "المرادف الذي يمثل الأيقونة." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "الفئة" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "الفئة الافتراضية." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "الإجراءات" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "التطبيقات" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "الفئات" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "الأجهزة" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "الشعارات" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "الرموز التعبيرية" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "النوع Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "الأماكن" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "الحالة" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "أخرى" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "اختر أيقونة" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "بحث" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "تصفّح" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "جار التحميل..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "الافتراضي" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "حدّد" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "إلغاء الأمر" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "السماح بالمسارات" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "هل سيسمح بالمسارات." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "الأيقونة الإفتراضية" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "الأيقونة المراد استخدامها بشكل افتراضي" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "حدد ملف الصورة" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "فتح" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "صورة" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "حول" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "المنطقة التي تظهر فيها أيقونات حالة XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "تطبيق حالة المصنع لل XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "تطبيق حالة ال XApp" xapp-2.8.8/po/vi.po0000664000175000017500000001143014736763051013034 0ustar fabiofabio# Vietnamese translation for linuxmint # Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2024-04-02 14:44+0000\n" "Last-Translator: thieninox \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Yêu thích" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Thao tác không được hỗ trợ" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Kích cỡ biểu tượng" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "Kích thước biểu tượng ưa thích." #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Biểu tượng" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "Chuỗi đại diện cho biểu tượng." #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Danh mục" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "Danh mục mặc định." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Hành động" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Ứng dụng" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Danh mục" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Thiết bị" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Biểu tượng" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Biểu tượng cảm xúc (Emoji)" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Kiểu MIME" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Vị trí" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Trạng thái" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Khác" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Chọn biểu tượng" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Tìm Kiếm" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Duyệt" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Đang tải…" #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Mặc định" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Chọn" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Huỷ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Cho phép những đường dẫn" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Bạn có cho phép đường dẫn hay không." #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Biểu tượng mặc định" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "Biểu tượng sử dụng theo mặc định" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Chọn tập tin hình ảnh" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Mở" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Hình ảnh" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Thông Tin" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Khu vực xuất hiện các biểu tượng trạng thái XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Nhà máy Applet Trạng thái XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet Trạng thái XApp" xapp-2.8.8/po/mai.po0000664000175000017500000001227314736763051013172 0ustar fabiofabio# Maithili translation for linuxmint # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-03-22 12:25+0000\n" "Last-Translator: Abhinav Jha \n" "Language-Team: Maithili \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:01+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "आइकनक आकार" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "पसंदीदा आइकनक आकार।" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "आइकन" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "आइकनक प्रतिनिधित्व करय वाला स्ट्रिंग।" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "श्रेणी" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "डिफ़ॉल्ट श्रेणी।" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "क्रियासभ" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "अनुप्रयोग" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "श्रेणिसभ" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "डिवाइस" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "प्रतीक (एम्ब्लेम )" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "इमोजी" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "माइम प्रकार" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "स्थान" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "स्थिति" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "आन" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "एकटा आइकन चुनू" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "खोजू" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "ब्रॉउज करू" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "लोड कए रहल..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "डिफॉल्ट" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "चुनू" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "रद्द करू" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "पथ सभक अनुमति" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "पथ सभक अनुमति देल जाय या नहि" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "डिफॉल्ट आइकन" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "डिफॉल्ट रूपसँ उपयोग करय वाला आइकन" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "छवि फाइलक चयन करु" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "खोलू" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "छवि" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "के बारेमे" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "क्षेत्र जतह XApp स्टेटस आइकन देखायत अछि" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "XApp स्थिति एप्लेट फैक्टरी" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "XApp स्थिति एप्लेट" xapp-2.8.8/po/it.po0000664000175000017500000001113114736763051013030 0ustar fabiofabio# Italian translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2020-11-25 17:42+0000\n" "Last-Translator: Dragone2 \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "Preferiti" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "Operazione non supportata" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "Dimensioni icona" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "La dimensione preferita per le icone" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "Icona" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "La stringa che rappresenta l'icona" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "Categoria" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "La categoria predefinita." #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "Azioni" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "Applicazioni" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "Categorie" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "Dispositivi" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "Simboli" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "Emoji" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "Tipi Mime" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "Risorse" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "Stato" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "Altro" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "Scegli un'icona" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "Cerca" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "Sfoglia" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "Caricamento..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "Predefinita" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "Seleziona" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "Annulla" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "Consenti percorsi" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "Se consentire i percorsi" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "Icona predefinita" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "L'icona da usare come predefinita" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "Seleziona un file di immagine" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "Apri" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "Immagine" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "Informazioni su..." #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "Area in cui vengono visualizzate le icone di stato delle XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "Fabbrica di Applet di Stato XApp" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr "Applet di Stato XApp" xapp-2.8.8/po/am.po0000664000175000017500000001121414736763051013013 0ustar fabiofabio# Amharic translation for linuxmint # Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 # This file is distributed under the same license as the linuxmint package. # FIRST AUTHOR , 2018. # msgid "" msgstr "" "Project-Id-Version: linuxmint\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2020-11-25 11:16+0000\n" "PO-Revision-Date: 2021-06-27 19:14+0000\n" "Last-Translator: samson \n" "Language-Team: Amharic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2025-01-06 12:00+0000\n" "X-Generator: Launchpad (build 6394e03793719e8d73f5a60b5439440e693c92f1)\n" #: libxapp/favorite-vfs-file.c:463 msgid "Favorites" msgstr "የምወዳቸው" #: libxapp/favorite-vfs-file.c:933 libxapp/favorite-vfs-file.c:963 #: libxapp/favorite-vfs-file.c:992 libxapp/favorite-vfs-file.c:1026 #: libxapp/favorite-vfs-file.c:1053 libxapp/favorite-vfs-file.c:1082 #: libxapp/favorite-vfs-file.c:1115 libxapp/favorite-vfs-file.c:1142 #: libxapp/favorite-vfs-file.c:1204 libxapp/favorite-vfs-file.c:1239 #: libxapp/favorite-vfs-file.c:1269 libxapp/favorite-vfs-file.c:1308 msgid "Operation not supported" msgstr "ተግባሩ የ ተደገፈ አይደለም" #: libxapp/xapp-icon-chooser-button.c:207 #: libxapp/xapp-icon-chooser-dialog.c:639 msgid "Icon size" msgstr "የ ምልክት መጠን" #: libxapp/xapp-icon-chooser-button.c:208 #: libxapp/xapp-icon-chooser-dialog.c:640 msgid "The preferred icon size." msgstr "የ ተመረጠው የ ምልክት መጠን" #: libxapp/xapp-icon-chooser-button.c:222 msgid "Icon" msgstr "ምልክት" #: libxapp/xapp-icon-chooser-button.c:223 msgid "The string representing the icon." msgstr "ምልክቱን የሚወክለው ሀረግ" #: libxapp/xapp-icon-chooser-button.c:234 msgid "Category" msgstr "ምድብ" #: libxapp/xapp-icon-chooser-button.c:235 msgid "The default category." msgstr "ነባር ምድብ" #: libxapp/xapp-icon-chooser-dialog.c:98 msgid "Actions" msgstr "ተግባሮች" #: libxapp/xapp-icon-chooser-dialog.c:101 msgid "Applications" msgstr "መተግበሪያ" #: libxapp/xapp-icon-chooser-dialog.c:104 msgid "Categories" msgstr "ምድቦች" #: libxapp/xapp-icon-chooser-dialog.c:107 msgid "Devices" msgstr "አካላቶች" #: libxapp/xapp-icon-chooser-dialog.c:110 msgid "Emblems" msgstr "አርማዎች" #: libxapp/xapp-icon-chooser-dialog.c:113 msgid "Emoji" msgstr "ኢሞጂ" #: libxapp/xapp-icon-chooser-dialog.c:116 msgid "Mime types" msgstr "የ Mime አይነቶች" #: libxapp/xapp-icon-chooser-dialog.c:119 msgid "Places" msgstr "ቦታዎች" #: libxapp/xapp-icon-chooser-dialog.c:122 msgid "Status" msgstr "ሁኔታው" #: libxapp/xapp-icon-chooser-dialog.c:125 msgid "Other" msgstr "ሌሎች" #: libxapp/xapp-icon-chooser-dialog.c:454 msgid "Choose an icon" msgstr "ምልክት ይምረጡ" #: libxapp/xapp-icon-chooser-dialog.c:476 msgid "Search" msgstr "መፈለጊያ" #: libxapp/xapp-icon-chooser-dialog.c:483 msgid "Browse" msgstr "መቃኛ" #: libxapp/xapp-icon-chooser-dialog.c:539 msgid "Loading..." msgstr "በ መጫን ላይ..." #: libxapp/xapp-icon-chooser-dialog.c:586 msgid "Default" msgstr "ነባር" #: libxapp/xapp-icon-chooser-dialog.c:596 msgid "Select" msgstr "ይምረጡ" #: libxapp/xapp-icon-chooser-dialog.c:605 #: libxapp/xapp-icon-chooser-dialog.c:1936 msgid "Cancel" msgstr "መሰረዣ" #: libxapp/xapp-icon-chooser-dialog.c:652 msgid "Allow Paths" msgstr "መንገድ መፍቀጃ" #: libxapp/xapp-icon-chooser-dialog.c:653 msgid "Whether to allow paths." msgstr "መንገዱ ይፈቀድ እንደሆን" #: libxapp/xapp-icon-chooser-dialog.c:664 msgid "Default Icon" msgstr "ነባር ምልክቶች" #: libxapp/xapp-icon-chooser-dialog.c:665 msgid "The icon to use by default" msgstr "" #: libxapp/xapp-icon-chooser-dialog.c:1933 msgid "Select image file" msgstr "የ ምስል ፋይል ይምረጡ" #: libxapp/xapp-icon-chooser-dialog.c:1938 msgid "Open" msgstr "መክፈቻ" #: libxapp/xapp-icon-chooser-dialog.c:1953 msgid "Image" msgstr "ምስል" #: status-applets/mate/mate-xapp-status-applet.py:330 msgid "About" msgstr "ስለ" #: status-applets/mate/mate-xapp-status-applet.py:350 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:7 #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:11 msgid "Area where XApp status icons appear" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:6 msgid "XApp Status Applet Factory" msgstr "" #: status-applets/mate/org.x.MateXAppStatusApplet.mate-panel-applet.in.in:10 msgid "XApp Status Applet" msgstr ""