Skip to content

Commit

Permalink
Version 1.4
Browse files Browse the repository at this point in the history
Fixed issues with nautilus (uses newer APIs), updated some texts, added 'align icons' and a sort icons menu, and a whole bunch of other fixes. Update now!
  • Loading branch information
DEM0NAssissan7 authored Jul 29, 2021
1 parent ed4347f commit 18fcce6
Show file tree
Hide file tree
Showing 14 changed files with 589 additions and 156 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Keep in mind that the extension is still an early beta and still has many bugs.

## Current version

Version 1.2
Version 1.4

## Requirements

Expand Down
2 changes: 2 additions & 0 deletions askNamePopup.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const DesktopIconsUtil = imports.desktopIconsUtil;
const Gettext = imports.gettext.domain('desktopicons-neo');

const _ = Gettext.gettext;
Expand All @@ -36,6 +37,7 @@ var AskNamePopup = class {
this._window.add_button(_("Cancel"), Gtk.ResponseType.CANCEL);
this._window.set_modal(true);
this._window.set_title(title);
DesktopIconsUtil.windowHidePagerTaskbarModal(this._window, true);
let contentArea = this._window.get_content_area();
this._textArea = new Gtk.Entry();
if (filename) {
Expand Down
5 changes: 3 additions & 2 deletions askRenamePopup.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ var AskRenamePopup = class {
}

_do_rename() {
DBusUtils.NautilusFileOperationsProxy.RenameFileRemote(this._fileItem.file.get_uri(),
this._textArea.text,
DBusUtils.NautilusFileOperations2Proxy.RenameURIRemote(
this._fileItem.file.get_uri(), this._textArea.text,
DBusUtils.NautilusFileOperations2Proxy.platformData(),
(result, error) => {
if (error)
throw new Error('Error renaming file: ' + error.message);
Expand Down
87 changes: 71 additions & 16 deletions dbusUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
var NautilusFileOperationsProxy;
var NautilusFileOperations2Proxy;
var FreeDesktopFileManagerProxy;
var GnomeNautilusPreviewProxy;
var SwitcherooControlProxyClass;
Expand All @@ -27,37 +27,51 @@ var discreteGpuAvailable;
var GnomeArchiveManagerProxy;
var GtkVfsMetadataProxy;

const NautilusFileOperationsInterface = `<node>
<interface name='org.gnome.Nautilus.FileOperations'>
const NautilusFileOperations2Interface = `<node>
<interface name='org.gnome.Nautilus.FileOperations2'>
<method name='CopyURIs'>
<arg name='URIs' type='as' direction='in'/>
<arg name='Destination' type='s' direction='in'/>
<arg type='as' name='sources' direction='in'/>
<arg type='s' name='destination' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='MoveURIs'>
<arg name='URIs' type='as' direction='in'/>
<arg name='Destination' type='s' direction='in'/>
<arg type='as' name='sources' direction='in'/>
<arg type='s' name='destination' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='EmptyTrash'>
<arg type="b" name="ask_confirmation" direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='TrashFiles'>
<arg name='URIs' type='as' direction='in'/>
<method name='TrashURIs'>
<arg type='as' name='uris' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='DeleteURIs'>
<arg type='as' name='uris' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='CreateFolder'>
<arg name='URI' type='s' direction='in'/>
<arg type='s' name='parent_uri' direction='in'/>
<arg type='s' name='new_folder_name' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='RenameFile'>
<arg name='URI' type='s' direction='in'/>
<arg name='NewName' type='s' direction='in'/>
<method name='RenameURI'>
<arg type='s' name='uri' direction='in'/>
<arg type='s' name='new_name' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='Undo'>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='Redo'>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<property name='UndoStatus' type='i' access='read'/>
</interface>
</node>`;

const NautilusFileOperationsProxyInterface = Gio.DBusProxy.makeProxyWrapper(NautilusFileOperationsInterface);
const NautilusFileOperations2ProxyInterface = Gio.DBusProxy.makeProxyWrapper(NautilusFileOperations2Interface);

const FreeDesktopFileManagerInterface = `<node>
<interface name='org.freedesktop.FileManager1'>
Expand Down Expand Up @@ -241,17 +255,58 @@ const GtkVfsMetadataInterface = `<node>
const GtkVfsMetadataProxyInterface = Gio.DBusProxy.makeProxyWrapper(GtkVfsMetadataInterface);

function init() {
NautilusFileOperationsProxy = new NautilusFileOperationsProxyInterface(
NautilusFileOperations2Proxy = new NautilusFileOperations2ProxyInterface(
Gio.DBus.session,
'org.gnome.Nautilus',
'/org/gnome/Nautilus',
'/org/gnome/Nautilus/FileOperations2',
(proxy, error) => {
if (error) {
log('Error connecting to Nautilus');
}
}
);

NautilusFileOperations2Proxy.platformData = params => {
const inShell = typeof global !== 'undefined';
const defaultParams = {
timestamp: inShell ? global.get_current_time() :
imports.gi.Gtk.get_current_event_time(),
parentWindow: inShell ? null :
imports.gi.Gtk.get_current_event().get_window(),
windowPosition: 'center',
};
const { parentWindow, timestamp, windowPosition } = {
...defaultParams,
...params,
};

let { parentHandle } = params ?? { parentHandle: ''};
if (!parentHandle && parentWindow) {
try {
imports.gi.versions.GdkX11 = '3.0';
const { GdkX11 } = imports.gi;
const topLevel = parentWindow.get_effective_toplevel();

if (topLevel.constructor.$gtype === GdkX11.X11Window.$gtype) {
const xid = GdkX11.X11Window.prototype.get_xid.call(topLevel);
parentHandle = `x11:${xid}`;
} /* else if (topLevel instanceof GdkWayland.Toplevel) {
FIXME: Need Gtk4 to use GdkWayland
const handle = GdkWayland.Toplevel.prototype.export_handle.call(topLevel);
parentHandle = `wayland:${handle}`;
} */
} catch (e) {
logError(e, 'Impossible to determine the parent window');
}
}

return {
'parent-handle': new GLib.Variant('s', parentHandle),
'timestamp': new GLib.Variant('u', timestamp),
'window-position': new GLib.Variant('s', windowPosition),
};
}

FreeDesktopFileManagerProxy = new FreeDesktopFileManagerProxyInterface(
Gio.DBus.session,
'org.freedesktop.FileManager1',
Expand Down
33 changes: 30 additions & 3 deletions desktopIconsUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gdk = imports.gi.Gdk;
const Prefs = imports.preferences;
const Enums = imports.enums;
const Gettext = imports.gettext.domain('desktopicons-neo');
Expand Down Expand Up @@ -113,6 +114,7 @@ function getExtraFolders() {

function getMounts(volumeMonitor) {
let show_volumes = Prefs.desktopSettings.get_boolean('show-volumes');
let show_network = Prefs.desktopSettings.get_boolean('show-network-volumes');

try {
var mounts = volumeMonitor.get_mounts();
Expand All @@ -126,9 +128,9 @@ function getMounts(volumeMonitor) {
for (let mount of mounts) {
try {
let is_drive = (mount.get_drive() != null) || (mount.get_volume() != null);
let uri = mount.get_root().get_uri();
if ((is_drive && show_volumes) && (!(uris.includes(uri)))) {
result.push([mount.get_root(), Enums.FileType.EXTERNAL_DRIVE, mount]);
let uri = mount.get_default_location().get_uri();
if (((is_drive && show_volumes) || (!is_drive && show_network)) && (!(uris.includes(uri)))) {
result.push([mount.get_default_location(), Enums.FileType.EXTERNAL_DRIVE, mount]);
uris.push(uri);
}
} catch(e) {
Expand Down Expand Up @@ -243,3 +245,28 @@ function writeTextFileToDesktop(text, filename, dropCoordinates) {
} catch(e) {}
}
}

function windowHidePagerTaskbarModal(window, modal) {
let using_X11 = Gdk.Display.get_default().constructor.$gtype.name === 'GdkX11Display';
if (using_X11) {
window.set_type_hint(Gdk.WindowTypeHint.NORMAL);
window.set_skip_taskbar_hint(true);
window.set_skip_pager_hint(true);
} else {
let title = window.get_title();
if (modal) {
title = title + '@!HTD';
} else {
title = title + '@!H';
}
window.set_title(title);
}
if (modal) {
window.connect('focus-out-event', () => {
window.set_keep_above(true);
window.stick();
window.grab_focus();
});
window.grab_focus();
}
}
Loading

0 comments on commit 18fcce6

Please sign in to comment.