summaryrefslogtreecommitdiff
path: root/libgdm
Commit message (Collapse)AuthorAgeFilesLines
* manager: Find user's current graphical session, not session of callerwip/benzea/systemd-userIain Lane2019-08-052-5/+4
| | | | | | | If (e.g.) gnome-shell is started as a systemd --user unit, it won't be part of the login session. We should instead look through all of the user's sessions until we find the login session, and take that as our session.
* libgdm: Always de-duplicateIain Lane2019-03-161-1/+1
| | | | | I put this inside an `#ifdef ENABLE_WAYLAND_SUPPORT` before, which would mean that it's not called if that's not defined.
* libgdm: Remove duplicate sessions once, after all sessions have been processedIain Lane2019-03-151-16/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We add sessions to a hash table keyed on the basename without extension, and while we're adding them we de-duplicate based on the translated name (the text that will be visible in the switcher). This has a problem. In this situation: ``` laney@disco:~$ tree /usr/share/{wayland-,x}sessions/ /usr/share/wayland-sessions/ ├── gnome.desktop └── ubuntu-wayland.desktop /usr/share/xsessions/ ├── gnome.desktop -> gnome-xorg.desktop ├── gnome-xorg.desktop └── ubuntu.desktop ``` We process the X sessions first, and then the Wayland sessions. The deduplication might end up removing `xsessions/gnome-xorg` and leaving `xsessions/gnome`. Then when we come to process the Wayland sessions, we will clobber `xsessions/gnome` with `wayland-sessions/gnome`, as they have the same ID. When everything is working, it is actually *intentional* that `xsessions/gnome` gets clobbered, so that you end up seeing "GNOME" (wayland) and "GNOME on Xorg" in the switcher, and not (e.g.) "GNOME on Xorg" twice, and you have the correct fallback behaviour in case you ever enable/disable Wayland. Instead of filtering while we add things, we can add all the sessions we find (clobbering duplicate IDs as before), and then process the list once at the end, removing sessions with duplicated visible names at that point. Closes: #473
* Remove erroneous NULL from session search directoriesTomasz Miąsko2019-03-131-2/+0
| | | | Fixes issue #470.
* build: Don't dist generated filesIain Lane2019-02-251-1/+3
| | | | | | Various generated files are ending up being disted, which is wrong becuase they leak the maintainer's prefix into the tarball and are generated anyway during build.
* libgdm: filter out sessions with duplicate nameszhengqiang1302019-01-071-1/+16
| | | | | | | | | | | Right now if two session files have the same translated name, the login screen will show both of them. There's no way the user can know which session does which, so that's not a great user experience. Furthermore, in the face of symlinks, both sessions truely could be identical. This commit filters out the duplicates, so only one shows in the list. Closes https://gitlab.gnome.org/GNOME/gdm/issues/437
* client: use G_DECLARE_FINAL_TYPENiels De Graef2018-12-232-140/+110
| | | | This also gets rid of the deprecated `g_type_class_add_private()`
* Search sessions in XDG_DATA_DIRSJan Tojnar2018-08-271-4/+32
|
* libgdm: use g_autoptr to manage objects lifecycleMarco Trevisan (Treviño)2018-06-121-153/+111
| | | | | Using auto pointers allows to manage things in a cleaner way without having to manually unref things before returning.
* libgdm: Return NULL on invalid client instancesMarco Trevisan (Treviño)2018-06-041-8/+8
|
* libgdm: Don't save manager addressMarco Trevisan (Treviño)2018-06-021-15/+9
| | | | | There's no need to keep the manager connection address around, and use autofree to clean it up
* libgdb: Try to reuse connections from the available proxiesMarco Trevisan (Treviño)2018-06-021-31/+39
| | | | | | | | | Instead of using the hard-to-maintain shared pointer to the dbus connection to the manager and reset it when the proxies that use it are deleted, just look which proxy is currently available and try to reuse the connection from it. Fixes #386
* libgdm: Use auto-pointers and cleanup codeMarco Trevisan (Treviño)2018-06-021-8/+5
|
* libgdm: Don't leak connection on sync re-authenticationMarco Trevisan (Treviño)2018-06-021-1/+1
|
* libgdm: Don't double-ref the connection got from taskMarco Trevisan (Treviño)2018-06-021-2/+2
| | | | | | | | Both if we re-use the shared connection in `gdm_client_get_connection` and if we create a new one in `on_connected`, we steal the pointer here by using `g_task_propagate_pointer` and thus we don't have to add an additional reference to this connection when returning, or it won't ever be consumed by function customers.
* libgdm: Unref the manager propagated from taskMarco Trevisan (Treviño)2018-06-021-1/+3
| | | | | | | | | This instance has already been reffed when passed to the task, and since we're stealing it with `g_task_propagate_pointer` it won't be unreffed. We could also do this in the `on_reauthentication_channel_opened` callback but since the new task will ref it anyway, we can just be clean and do it here.
* libgdm: Drop weak refs on the GDBusConnectionIain Lane2018-05-161-47/+0
| | | | | | | | | The GDBusProxies hold a strong reference to the connection themselves, so maintaining separate weak references is unnecessary. This commit drops those extraneous weak references. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: get connection explicitlyMarco Trevisan (Treviño)2018-05-161-54/+82
| | | | | | | | | | | At the moment we call gdm_client_open_connection and when it finishes, assume client->priv->connection is implicitly initialized. This commit makes the operation more explicit by changing gdm_client_open_connection to gdm_client_get_connection and returning the GDBusConnection object directly, instead of returning a boolean. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: use g_object_unref instead of g_clear_object for weakrefsRay Strode2018-05-161-8/+8
| | | | | | | | | | | At the moment we add a weakref on each proxy to the connection object. For the _sync variant functions, When the weakref fires, they call g_clear_object, clearing the connection, even if other proxies still have a reference. This commit changes that weak ref code to use g_object_unref instead. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: don't keep manager proxy around longer than we need itRay Strode2018-05-161-93/+26
| | | | | | | | | | | | Right now we keep the manager proxy alive long after we need it. It doesn't get cleared until one of the other proxies go away. That is not only unnecessary but illogical and confusing. This commit changes the manager proxy to be transient—only alive long enough to get what we need from it. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: fix pointer/boolean task confusionRay Strode2018-05-161-2/+6
| | | | | | | | | The manager fetching code in GdmClient treats its task return value as boolean, but it's actually a pointer (the manager) This commit corrects the confusion. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: drop support for serializing multiple opensRay Strode2018-05-161-71/+40
| | | | | | | | | | | | | | | | | | Right now libgdm tries to handle multiple simultaneous open calls at the same time by serializing the requests and giving them all the same connection. It's broken, though. - The pending_opens list is never populated, so we end up just doing multiple simultaneous open operations at a time anyway. - The finish code ends up calling g_task_return_error (task, NULL) instead of g_task_return_pointer in the non-error case. Since the feature doesn't work, drop it for now. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: add weak pointer for connection objectMarco Trevisan (Treviño)2018-05-161-0/+12
| | | | | | | | | At the moment we fail to nullify GdmClient's connection to GDM when the connection is disposed. This commit adds a weak pointer to correct that mistake. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: Don't unref a connection that's in useMarco Trevisan (Treviño)2018-05-161-0/+2
| | | | | | | | | | | | | If an async task tries to reuse an open connection, it erroneously explicitly unrefs it. That is incorrect, because there are weak references in use to handle disposing the connection when its no longer in use. This commit makes sure the local connection object in open_connection is nullified so the connection doesn't get autofree'd. https://bugzilla.gnome.org/show_bug.cgi?id=795940
* libgdm: "Fix" a memory leakFlorian Müllner2018-02-261-1/+11
| | | | | | | | | | The gdm_available_sessions_map hash table is set up with a value-free function that frees the struct itself, but not its contents. Of course elements are never removed from the map, so this fix doesn't matter in practice. https://bugzilla.gnome.org/show_bug.cgi?id=793855
* Replace deprecated GSimpleAsyncResult with GTaskRobert Ancell2017-12-141-296/+235
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=783082
* Generate autocleanup definitions in libgdmRobert Ancell2017-12-052-0/+6
|
* Add missing dependency to .pc fileRobert Ancell2017-12-051-0/+1
|
* libgdm: add api for getting at ChoiceList interfaceRay Strode2017-10-202-2/+218
| | | | | | This provides gnome-shell with a way to use the new interface. https://bugzilla.gnome.org/show_bug.cgi?id=788851
* Ignore session IDs ending with "-xorg" under X11Olivier Tilloy2017-10-171-0/+18
| | | | | | | | | | This is done under the assumption that they are meant for Wayland only. It is expected that a session called "foo" would have a "foo.desktop" file under wayland-sessions/, a fallback "foo.desktop" under xsessions/, and another "foo-xorg.desktop" under xsessions (that may simply be a symlink to "foo.desktop") specifically for Wayland. https://bugzilla.gnome.org/show_bug.cgi?id=788552
* daemon,libgdm: allow wayland sessions with --disable-user-display-serverRay Strode2017-09-191-0/+2
| | | | | | | | | | | | Right now we hide wayland sessions from the list if the greeter isn't wayland. The greeter is never wayland if built with --disable-user-display-server. This commit allows wayland sessions for the user session, when --disable-user-display-server --enable-wayland-support is specified, even though the greeter won't use wayland itself. https://bugzilla.gnome.org/show_bug.cgi?id=787899
* libgdm: filter out wayland sessions from X11 login screenRay Strode2015-11-061-0/+4
| | | | | | | | | | | | | We use wayland by default on the login screen, so if we're running in an X11 session, then the presumption is that we're incapable of using wayland. If we're incapable of using wayland sessions then we shouldn't present those sessions to the user in the session list either. This commit makes sure to avoid showing wayland based sessions in the session list if the login screen is running on X11. https://bugzilla.gnome.org/show_bug.cgi?id=757715
* libgdm: refactor session list handling codeRay Strode2015-11-061-4/+14
| | | | | | | | | | This commit splits the code for getting sessions up into two chunks: xorg and wayland. This is necessary because future commits will treat xorg and wayland sessions differently. https://bugzilla.gnome.org/show_bug.cgi?id=757715
* require logind supportRay Strode2015-06-121-29/+16
| | | | | | | Now that consolekit support is gone, this commit drops all the conditionalizing of logind support. https://bugzilla.gnome.org/show_bug.cgi?id=743940
* drop consolekit supportRay Strode2015-06-121-308/+0
| | | | | | It was deprecated in 3.16 to be removed in 3.18 https://bugzilla.gnome.org/show_bug.cgi?id=743940
* user-switching: Make sure all exit paths have return valuesRay Strode2015-02-191-0/+2
| | | | | | | | | | | | | | | The openSUSE Build Service raises a flag for [ 55s] I: Program returns random data in a function [ 55s] E: gdm no-return-in-nonvoid-function gdm-common.c:850 [ 55s] E: gdm no-return-in-nonvoid-function gdm-user-switching.c:597 This can happen when CONSOLEKIT is disabled (As is newly the case) and LOGING_RUNNING would return false. Based on a patch by Dominique Leuenberger https://bugzilla.gnome.org/show_bug.cgi?id=744787
* Don't leak result of g_dbus_connection_new_for_address_finish()Owen W. Taylor2014-10-091-5/+10
| | | | | | | | g_dbus_connection_new_for_address_finish() returns a new reference; we can't simply ignore the returned connection, even though it is also passed in as the source object of the GAsyncReadyCallback. https://bugzilla.gnome.org/show_bug.cgi?id=738246
* Unref result of g_async_result_get_source_object()Owen W. Taylor2014-10-091-0/+3
| | | | | | | g_async_result_get_source_object() returns a reference that must be unreferenced. https://bugzilla.gnome.org/show_bug.cgi?id=738246
* Unref async results after calling g_simple_async_result_complete_in_idle()Owen W. Taylor2014-10-091-0/+26
| | | | | | | All async results were leaked, since g_simple_async_result_complete_in_idle() takes a new reference rather than assuming the ref passed in. https://bugzilla.gnome.org/show_bug.cgi?id=738246
* manager: close up timed login raceRay Strode2014-06-051-0/+24
| | | | | | | | | | | | Previously we would emit the timed-login-requested signal after the client connects, which might be before it was listening for the signal. Now we only emit the signal in direct response to a GetTimedLoginDetails call, which we make implicitly when the appropiate proxy interface is set up. https://bugzilla.gnome.org/show_bug.cgi?id=680348
* wayland: make optional for FreeBSDRay Strode2014-03-191-0/+2
| | | | | | | FreeBSD build broke, so this commit makes wayland a configure time argument https://bugzilla.gnome.org/show_bug.cgi?id=726380
* Add wayland-sessionsJasper St. Pierre2014-03-181-0/+1
| | | | | | Add the wayland-sessions directory, as shipped by gdm. https://bugzilla.gnome.org/show_bug.cgi?id=726380
* libgdm: move out of gui/ directoryRay Strode2013-12-168-0/+2644
libgdm isn't a UI, so it's weird to be in a directory called GUI. This commit moves it up a layer.