GNOME issueshttps://gitlab.gnome.org/groups/GNOME/-/issues2024-03-17T13:35:16Zhttps://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/323Allow setting Location manually2024-03-17T13:35:16ZJeremy BichaAllow setting Location manuallyUse Case 1
==========
Alice uses a VPN for her internet connection for privacy. Her VPN is located in California but she lives in Melbourne, Australia. She wants to use the automatic _Sunset to Sunrise_ Night Light feature, but the sunse...Use Case 1
==========
Alice uses a VPN for her internet connection for privacy. Her VPN is located in California but she lives in Melbourne, Australia. She wants to use the automatic _Sunset to Sunrise_ Night Light feature, but the sunset & sunrise times are incorrect. Also, the automatic timezone is wrong. She could fix this and still use the GNOME automatic features if only she could manually set her location to Melbourne.
Use Case 2
==========
Michael lives in St Louis but geoclue thinks he is in Phoenix, Arizona which is 1500 miles away and 2 timezones different (most of the year). He also has problems with the automatic Night Light feature.
Related Art in GNOME
==================
* GNOME Settings > Details > Date & Time > Time Zone
* GNOME Maps app
* GNOME Weather app
Tasks
=====
* [ ] Design Mockup
* [ ] Developer Implementationhttps://gitlab.gnome.org/GNOME/chronojump/-/issues/76Edit extra load in Kg recalculates as in percent2018-12-20T16:40:40ZXavier PadullésEdit extra load in Kg recalculates as in percentTo reproduce:<br>
1.- Perform a SJL with 100% of the body weight<br>
2.- Edit the jump and change the extra weight to 1Kg<br>
3.- Check that the load shown is the (body mass)*(mass in edit window)/100<br>
4.- Reloading the session fixes ...To reproduce:<br>
1.- Perform a SJL with 100% of the body weight<br>
2.- Edit the jump and change the extra weight to 1Kg<br>
3.- Check that the load shown is the (body mass)*(mass in edit window)/100<br>
4.- Reloading the session fixes the problem and recalculates the extra load.<br>
Related: The jump profile is not updated when some jump is edited. You need to reload the sessionhttps://gitlab.gnome.org/GNOME/chronojump/-/issues/75Recalculating a CON set don't recalculate de saved repetition2023-10-10T14:03:31ZXavier PadullésRecalculating a CON set don't recalculate de saved repetitionTo reproduce:<br>
1.- Record or open a set in concentric mode<br>
2.- Check that the best rep is saved in analysis<br>
3.- Change the set to ECC-CON and recalculate.<br>
4.- Check that the best rep is marked as saved.<br>
5.- In analysis...To reproduce:<br>
1.- Record or open a set in concentric mode<br>
2.- Check that the best rep is saved in analysis<br>
3.- Change the set to ECC-CON and recalculate.<br>
4.- Check that the best rep is marked as saved.<br>
5.- In analysis the repetition is still in CON modehttps://gitlab.gnome.org/GNOME/mutter/-/issues/417Some applications don't appear at the previous position2022-01-19T07:07:28ZAlexander Popov (AlexWayfer)Some applications don't appear at the previous positionHello!
I thought it's a problem of applications, but I found https://wiki.gnome.org/HowDoI/SaveWindowState
> The position of the window is best left to the window manager.
So, I'm here.
Some applications, like Calculator, appears at...Hello!
I thought it's a problem of applications, but I found https://wiki.gnome.org/HowDoI/SaveWindowState
> The position of the window is best left to the window manager.
So, I'm here.
Some applications, like Calculator, appears at the previous position.
And other, like Gedit or PulseEffects, doesn't (they appear at `0,0` position of desktop).
I guess, it's an issue with window manager.
```
Arch Linux
gnome-shell 1:3.30.2-1
mutter 3.30.2-1
gnome-calculator 3.30.1-1
gedit 3.30.2-1
pulseeffects 4.4.1-1
```
Thank you.https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/253g_function_info_invoke() may truncate return values2018-12-20T15:25:44Zkeriharrisg_function_info_invoke() may truncate return valuesI've run into an issue with gobject-introspection where return values from functions can in some circumstances be truncated. An example of such a function is gdk_pixbuf_read_pixels() [1] which has the signature:
const guint8 *
g...I've run into an issue with gobject-introspection where return values from functions can in some circumstances be truncated. An example of such a function is gdk_pixbuf_read_pixels() [1] which has the signature:
const guint8 *
gdk_pixbuf_read_pixels (const GdkPixbuf *pixbuf);
Calling gdk_pixbuf_read_pixels() directly and comparing the result when the function is called via g_function_info_invoke() is illustrative of the truncation problem:
Calling gdk_pixbuf_read_pixels() directly...
retval: 0x7fc14fd4a010 // healthy return value
Calling gdk_pixbuf_read_pixels() via g_function_info_invoke()...
ret_arg->v_pointer: 0x10 // truncated return value
The problem arises in gicallableinfo.c when we translate back and forth between the GI <-> FFI data types. There are two places in which this translation fails:
1. translating return-arg GITypeInfo -> ffi_type values
In g_callable_info_invoke() we call:
rinfo = g_callable_info_get_return_type ((GICallableInfo *)info);
but this does not consider whether the return value is a pointer; a pointer-to-integral type is mapped to a integral type. e.g. a guint8* is mapped to a ffi_type_uint8.
2. translating ffi_return_value -> GIArgument return value
In gi_type_info_extract_ffi_return_value() we don't consider whether the return value is a pointer. In the case where the size represented by the type-info tag is less than the size of a pointer then we'll truncate the return value. For example, in the above case of gdk_pixbuf_read_pixels() we execute:
switch (g_type_info_get_tag (return_info)) {
...
case GI_TYPE_TAG_UINT8:
arg->v_uint8 = (guint8) ffi_value->v_ulong;
break;
ffi_value->v_pointer should hold the value of a (const guint8 *) but we instead look at ffi_value->v_ulong, and then cast it to a guint8.
[1] https://developer.gnome.org/gdk-pixbuf/2.36/gdk-pixbuf-The-GdkPixbuf-Structure.html#gdk-pixbuf-read-pixelshttps://gitlab.gnome.org/GNOME/gimp/-/issues/2682Make double-click in the Move tool useful2020-03-03T17:31:10ZAlexandre ProkoudineMake double-click in the Move tool usefulDouble-click in the Move tool could be used to enter editing mode depending on the kind of object you are manipulating:
* Double-click on a text layer — switch to the Text tool and enter the text box you clicked on.
* Double-click on a ...Double-click in the Move tool could be used to enter editing mode depending on the kind of object you are manipulating:
* Double-click on a text layer — switch to the Text tool and enter the text box you clicked on.
* Double-click on a path — switch to the Path tool in the Edit mode.https://gitlab.gnome.org/GNOME/gnote/-/issues/11Gnote gets slugglish with lots of content.2024-01-14T14:34:04ZHoward JohnsonGnote gets slugglish with lots of content.After adding lots of content, including many long notes, Gnote gets unreasonably sluggish.
I solved this before by splitting my Gnotes in half, or in other words, into two different folders and use the `--note-path <directory>` option t...After adding lots of content, including many long notes, Gnote gets unreasonably sluggish.
I solved this before by splitting my Gnotes in half, or in other words, into two different folders and use the `--note-path <directory>` option to access the other half.
**I'm looking for a better solution**, and one where I can still search all of my notes easily.
It appears to me that some background operation or process is slowing Gnote, causing what looks like extended indexing or garbage collection delays.
First, I don't need, nor use, the ability to link notes. To see if this is the slowdown is there a way to turn this off?
Failing that, are there other thing I can do, perhaps with a custom build?
Thanks.
Running Gnote ver 3.22.1 on
OS: GNU/Linux Debian 9.6 (x86-64);
Cinnamon desktop: 3.2.7;
Linux Kernel: 4.9.0-8-amd64;
Processor: Intel Core 2 Duo P8800;
Graphics Card: AMD/ATI RV710/M92 Mobility Radeon HD 4530/4570/545vhttps://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/321Print job cannot be deleted, buttons in dialog are broken2021-03-08T14:24:45ZMichael CatanzaroPrint job cannot be deleted, buttons in dialog are brokenI have this print job here:
![Screenshot_from_2018-12-19_11-25-41](/uploads/e335861629ad916c92fded51bc82b8c8/Screenshot_from_2018-12-19_11-25-41.png)
It's been chilling out there past multiple reboots. Somehow it got into a state such ...I have this print job here:
![Screenshot_from_2018-12-19_11-25-41](/uploads/e335861629ad916c92fded51bc82b8c8/Screenshot_from_2018-12-19_11-25-41.png)
It's been chilling out there past multiple reboots. Somehow it got into a state such that it cannot be deleted. The Clear All and Delete buttons do nothing, and there's no error message, not even when running in the terminal.
If I click the Pause button, it changes to a Play button, but clicking the Play button does nothing: the button does not change back to a Pause button. If I close and reopen the dialog, it changes back to a Pause button.
I'm getting gnome-shell notifications telling me my printer is not connected, which is accurate. I don't want to connect the printer. I just want to delete the print job.https://gitlab.gnome.org/GNOME/glib/-/issues/1629Documentation says g_assert_not_reached() should not be used in tests, but th...2018-12-23T14:03:21ZMichael CatanzaroDocumentation says g_assert_not_reached() should not be used in tests, but there's no alternativeThe documentation of `g_assert_not_reached()` says not to use it in tests, because it may get compiled out, similarly to `g_assert()`. But unlike the case with `g_assert()`, with `g_assert_not_reached()` there's no practical alternative ...The documentation of `g_assert_not_reached()` says not to use it in tests, because it may get compiled out, similarly to `g_assert()`. But unlike the case with `g_assert()`, with `g_assert_not_reached()` there's no practical alternative in GLib, so you'd have to write your own if you actually want to follow this advice. It's trivial to write, but we should have a standard macro.https://gitlab.gnome.org/GNOME/gtk-frdp/-/issues/10RDP: segmentation fault when open Properties2020-10-26T16:19:23ZGhost UserRDP: segmentation fault when open PropertiesSteps to reproduce
* Fedora 29, gnome-boxes 3.30.3
* create RDP to VM on Azure
* connect
* Right-click on the box in the collection view and select Properties, or if the box is running, click the menu (settings) button in the header bar...Steps to reproduce
* Fedora 29, gnome-boxes 3.30.3
* create RDP to VM on Azure
* connect
* Right-click on the box in the collection view and select Properties, or if the box is running, click the menu (settings) button in the header bar and select Properties.
* application will crash
Output from a terminal is attached.
[properties_crash.log](/uploads/3abe2b7fa4f21e9cd994a1eab9cef35e/properties_crash.log)https://gitlab.gnome.org/GNOME/gtk-frdp/-/issues/9RDP: segmentation fault with incorrect credentials2020-05-18T12:53:16ZGhost UserRDP: segmentation fault with incorrect credentialsSteps to reproduce:
* Fedora 29, gnome-boxes 3.30.3
* create new rdp connection with bad credentials (to the Azure in my case)
* application will fail and in addition is whole Fedora freeze for a few second
If you try to run it again ap...Steps to reproduce:
* Fedora 29, gnome-boxes 3.30.3
* create new rdp connection with bad credentials (to the Azure in my case)
* application will fail and in addition is whole Fedora freeze for a few second
If you try to run it again application crash in the same way. Only workaround which I've found is to recreate a new one "VM" in boxes.
The last few lines from a terminal:
```
[13:44:46:153] [18227:18286] [ERROR][com.freerdp.core] - freerdp_set_last_error ERRCONNECT_LOGON_FAILURE [0x00020014]
[13:44:46:153] [18227:18286] [ERROR][com.freerdp.core.rdp] - rdp_recv_callback: CONNECTION_STATE_NLA - nla_recv_pdu() fail
[13:44:46:153] [18227:18286] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1
[13:44:46:161] [18227:18286] [ERROR][com.winpr.thread] - failed to create thread pipe fd 0
[13:44:46:164] [18227:18286] [ERROR][com.freerdp.core.codecs] - Failed to create rfx codec context
Segmentation fault (core dumped)
```
Full log is attached.[segmentation_fault.log](/uploads/443e046cdb0df0c1ea982d625a5ca998/segmentation_fault.log)https://gitlab.gnome.org/GNOME/eog/-/issues/32One way to show image properties2023-02-26T12:41:59ZAllan DayOne way to show image propertiesEye of GNOME currently offers three different methods for a user to see image properties:
1. Status bar
2. Side pane
3. Properties dialog
This is problematic for various reasons:
- It clutters up the primary menu.
- It isn't cle...Eye of GNOME currently offers three different methods for a user to see image properties:
1. Status bar
2. Side pane
3. Properties dialog
This is problematic for various reasons:
- It clutters up the primary menu.
- It isn't clear to users which option they should use.
- It prevents us from properly improving the design of the image properties experience (because which one is it we're developing?)
- It allows users to clutter up the UI with multiple overlapping options (say if the status bar and side pane are displayed at once).
I don't believe that it's the user's responsibility to configure their apps properly. It's our responsibility to provide a sane set of high-quality options, which don't degrade the user experience.
We should pick one option (probably the side pane) and drop the other two.https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/33Support LDAP as a Contacts source2022-12-09T10:46:42ZMichael GrattonSupport LDAP as a Contacts sourceGeary recently had a feature request for LDAP support for contacts (GNOME/geary#177). Since the plan is to integrate with libfolks for contacts management, the best way to implement that would be for libfolks to support LDAP (see e.g. GN...Geary recently had a feature request for LDAP support for contacts (GNOME/geary#177). Since the plan is to integrate with libfolks for contacts management, the best way to implement that would be for libfolks to support LDAP (see e.g. GNOME/folks#32) and for GOA to allow enabling that via adding an LDAP account. This would be useful for people using GNOME in an "enterprise" context, I guess.
Assuming the libfolks support lands, would GOA be interested in adding an LDAP account provider?https://gitlab.gnome.org/GNOME/baobab/-/issues/12Allow rescanning a specific folder2023-11-25T05:40:08ZJeff MuizelaarAllow rescanning a specific folderDaisyDisk supports this and it's very helpful for updating as stuff is removed.DaisyDisk supports this and it's very helpful for updating as stuff is removed.https://gitlab.gnome.org/GNOME/shotwell/-/issues/88Custom shortcuts for tags2021-05-19T11:58:52ZvaracCustom shortcuts for tags## Please describe the problem you are trying to solve
95% of what I do in shotwell is tagging. Another 80% of this boils down to 2-5 tags.
It would largely help if I could create a custom shortcut to i.e. add a configured tag to all se...## Please describe the problem you are trying to solve
95% of what I do in shotwell is tagging. Another 80% of this boils down to 2-5 tags.
It would largely help if I could create a custom shortcut to i.e. add a configured tag to all selected photos.
## Other solutions you have considered
Digikam solves this like this: https://scribblesandsnaps.com/2011/05/25/assign-keyboard-shortcuts-to-tags-in-digikam/https://gitlab.gnome.org/GNOME/libgda/-/issues/157Write tests to test all DDL operations2021-01-31T03:29:34ZPavlo SolntsevWrite tests to test all DDL operationsWe need a test to test all DDL operations. Starting from CREATE DB and go over all available DDL operation. This test can be based on GdaDDlCreator (or renamed equivalent). Also, it can be a good platform for test driven development for ...We need a test to test all DDL operations. Starting from CREATE DB and go over all available DDL operation. This test can be based on GdaDDlCreator (or renamed equivalent). Also, it can be a good platform for test driven development for new DDL module. It may require to introduce new objects, e.g. GdaDbInfo to store information about DB itself, GdaUserInfo to store information about user. Additional control over parameters, e.g. "IF EXISTS" should be added. This is a starting list of operation we should implement for most common DBs. Items marked with (*) are subject for review and discussion.
SQLite3:
* [x] CREATE_TABLE
* [x] CREATE_VIEW
* [x] CREATE_DB
* [x] ADD_COLUMN
* [x] RENAME_TABLE
* [x] DROP_VIEW
* [x] CREATE_INDEX
* [x] DROP_INDEX
* [x] DROP_TABLE
PostgreSQL:
* [ ] CREATE_DB
* [x] CREATE_INDEX
* [ ] CREATE_ROLE
* [ ] CREATE_USER*
* [x] CREATE_TABLE
* [x] CREATE_VIEW
* [x] ADD_COLUMN
* [ ] DROP_COLUMN
* [ ] DROP_DB
* [x] DROP_INDEX
* [ ] DROP_ROLE
* [ ] DROP_USER
* [x] DROP_TABLE
* [x] DROP_VIEW
* [x] RENAME_TABLE
MySQL:
* [ ] CREATE_DB
* [ ] CREATE_TABLE
* [ ] CREATE_VIEW
* [ ] ADD_COLUMN
* [ ] DROP_COLUMN
* [ ] DROP_DB
* [ ] DROP_INDEX
* [ ] DROP_TABLE
* [ ] DROP_VIEW
* [ ] RENAME_TABLE
* [ ] COMMENT_COLUMN
* [ ] COMMENT_TABLE
* [ ] CREATE_INDEX
* [ ] CREATE_USER*
* [ ] DROP_ROLE*
* [ ] DROP_USER*
* [ ] CREATE_ROLE*6.2Pavlo SolntsevPavlo Solntsevhttps://gitlab.gnome.org/GNOME/gparted/-/issues/31Too slow for refresh devices2023-04-18T20:37:04ZGhost UserToo slow for refresh devicesI don't see how this can take any longer than fdisk --list which is INSTANTANEOUS.
In any case, don't lock up the whole gui until all devices are done - if the current device is refreshed, activate everything but the devices that still ...I don't see how this can take any longer than fdisk --list which is INSTANTANEOUS.
In any case, don't lock up the whole gui until all devices are done - if the current device is refreshed, activate everything but the devices that still need to be updated and show a spinning icon next to them.https://gitlab.gnome.org/GNOME/gnome-disk-utility/-/issues/117Freezes when trying to resize ntfs partition2022-03-05T23:15:24ZGhost UserFreezes when trying to resize ntfs partitionI wanted to shrink a 120 gb ntfs partition. It said it could resize it down by 20 gb so I went ahead and did it. After showing a spinner for a bit next to the device, it f**kd up itself and all windows behind it and decided to get a gray...I wanted to shrink a 120 gb ntfs partition. It said it could resize it down by 20 gb so I went ahead and did it. After showing a spinner for a bit next to the device, it f**kd up itself and all windows behind it and decided to get a gray overlay with no intention to ever come alive again.
Please implement proper asynchronicity and error reporting. A GUI never has to freeze for a background process even if that gets stuck.https://gitlab.gnome.org/GNOME/eog/-/issues/31Remove Eye of GNOME's status bar2021-09-29T00:44:50ZAllan DayRemove Eye of GNOME's status barStatus bars used to be a standard design pattern, but they have long gone out of fashion. I don't think that the HIG even covers them.
While there might still be odd cases where a status bar is appropriate, image viewers probably aren't...Status bars used to be a standard design pattern, but they have long gone out of fashion. I don't think that the HIG even covers them.
While there might still be odd cases where a status bar is appropriate, image viewers probably aren't one of them. The emphasis in the design of modern image viewers is, correctly, to have as little chrome or clutter as possible - to avoid distracting from the image being displayed as much as possible.
I think it would therefore be good to remove the status bar from Eye of GNOME.https://gitlab.gnome.org/GNOME/shotwell/-/issues/87Redundant file accesses leads to extreme slowness on high-latency remote mounts2023-10-28T03:04:24ZjimisRedundant file accesses leads to extreme slowness on high-latency remote mountsHi, I am now mounting my library directory over a high-latency link, almost 100ms ping. Both database and cache directory are local, on SSD, only the library is remote. Unfortunately Shotwell is almost unusable. I tried to debug it a bit...Hi, I am now mounting my library directory over a high-latency link, almost 100ms ping. Both database and cache directory are local, on SSD, only the library is remote. Unfortunately Shotwell is almost unusable. I tried to debug it a bit, and here is the simplest case I found, with clear evidence of what can be improved:
I open Shotwell and the progress bar saying "checking for changes in library" (or similar text, I don't recall) keeps going forever. I leave it for 10 minutes, and then I ignore it - it shows it's still working, but the bandwidth monitor shows minimal traffic.
The simplest use case then is scrolling through my catalog of photos while viewing the thumbnails, single-clicking on one photo, and copying the full path of the photo in order to access the specific photo via other means. **Single-clicking on a thumbnail freezes the UI and takes almost 30 seconds to unfreeze and display the information on the right panel.** Bandwidth monitor shows minimal usage, so I assume there is a lot of back-and-forth conversation with metadata packets.
Here is a log from `strace` showing some of system calls that shotwell does, while the UI is frozen:
```
17:34:59 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 23 <3.117285>
17:35:02 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <2.195079>
17:35:04 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 23 <3.246312>
17:35:08 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.683012>
17:35:09 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <3.617272>
17:35:13 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.417442>
17:35:15 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.850784>
17:35:16 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <2.272159>
17:35:19 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <2.156070>
17:35:21 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.881773>
17:35:23 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.889379>
17:35:25 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.406702>
17:35:26 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.907845>
17:35:28 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.419137>
17:35:30 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.882576>
17:35:32 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.389700>
17:35:33 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.868621>
17:35:35 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.403981>
17:35:36 stat("/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", {st_mode=S_IFREG|0600, st_size=3392069, ...}) = 0 <1.386416>
17:35:38 openat(AT_FDCWD, "/home/jimis/Pictures/shotwell_import/2018/04/27/20180427_183406.jpg", O_RDONLY) = 18 <1.870698>
```
Is it easy to identify which part of the code generates these identical system calls? Can they be reduced to one?
Version: Shotwell 0.30.1-c625f1030f05b22a9c8ade958241e16391541d67 compiled from source.