Fri, 22 Oct 2021 03:33:32 -0500
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
This continues our path down replacing the UiOps with Interfaces so that
developers can write user interfaces in other languages using gobject
introspection.
Testing Done:
Ran pidgin3 and set it to auto idle after 1 minute of system idle time. This attempted to query xscreen saver, but something didn't work there, but that's been happening before this change. Not sure if it's my system or the code just needs fixing.
Ran finch3 set idle time to 1 minute and verified that it set me to away after that minute.
I also used the libpurple idle time for both pidgin3 and finch3 and verified they continued to work as well.
Reviewed at https://reviews.imfreedom.org/r/1091/
| 11907 | 1 | /* |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
2 | * Pidgin - Universal Chat Client |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
3 | * Copyright (C) Pidgin Developers <devel@pidgin.im> |
| 11907 | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify | |
| 6 | * it under the terms of the GNU General Public License as published by | |
| 7 | * the Free Software Foundation; either version 2 of the License, or | |
| 8 | * (at your option) any later version. | |
| 9 | * | |
| 10 | * This program is distributed in the hope that it will be useful, | |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 13 | * GNU General Public License for more details. | |
| 14 | * | |
| 15 | * You should have received a copy of the GNU General Public License | |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
16 | * along with this program; if not, see <https://www.gnu.org/licenses/>. |
| 11907 | 17 | */ |
|
40439
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40360
diff
changeset
|
18 | |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40360
diff
changeset
|
19 | #ifdef HAVE_CONFIG_H |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40360
diff
changeset
|
20 | # include <config.h> |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40360
diff
changeset
|
21 | #endif |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40360
diff
changeset
|
22 | |
|
12410
98d8abd3db98
[gaim-migrate @ 14717]
Richard Laager <rlaager@pidgin.im>
parents:
12278
diff
changeset
|
23 | #include "gtkidle.h" |
| 11907 | 24 | |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
25 | #ifdef HAVE_IOKIT |
|
40039
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
26 | /* HAVE_UNISTD_H must have a value, see |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
27 | * https://forums.developer.apple.com/thread/86887 |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
28 | */ |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
29 | # ifdef HAVE_UNISTD_H |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
30 | # undef HAVE_UNISTD_H |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
31 | # define HAVE_UNISTD_H 1 |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
32 | # else |
|
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
33 | # define HAVE_UNISTD_H 0 |
|
40038
e2967758a0c4
Move to a newer method for getting the idle time on macos
Gary Kramlich <grim@reaperworld.com>
parents:
38606
diff
changeset
|
34 | # endif |
|
40039
dac8511b1992
usr/include/dispatch/dispatch.h on macos has a bad macro test that requires HAVE_UNISTD_H to have a value, this works around it.
Gary Kramlich <grim@reaperworld.com>
parents:
40038
diff
changeset
|
35 | |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
36 | # include <CoreFoundation/CoreFoundation.h> |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
37 | # include <IOKit/IOKitLib.h> |
|
38580
775bba9b53df
gtkidle: Add parentheses around defined preprocessor macro argument
Mike Ruprecht <cmaiku@gmail.com>
parents:
38578
diff
changeset
|
38 | #elif defined (_WIN32) |
|
38606
357f1b3c33d9
gtkidle: Include gtkwin32dep.h in its subdirectory
Mike Ruprecht <cmaiku@gmail.com>
parents:
38581
diff
changeset
|
39 | # include "win32/gtkwin32dep.h" |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
40 | #endif |
| 11907 | 41 | |
|
40360
e21f3bbcc2a5
Update all of the pidgin code to include purple.h
Gary Kramlich <grim@reaperworld.com>
parents:
40041
diff
changeset
|
42 | #include <purple.h> |
| 11907 | 43 | |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
44 | struct _PidginIdle { |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
45 | GObject parent; |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
46 | }; |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
47 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
48 | #if !defined(HAVE_IOKIT) && !defined(_WIN32) |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
49 | typedef struct { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
50 | gchar *bus_name; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
51 | gchar *object_path; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
52 | gchar *iface_name; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
53 | } PidginDBusScreenSaverInfo; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
54 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
55 | static const PidginDBusScreenSaverInfo screensavers[] = { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
56 | { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
57 | "org.freedesktop.ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
58 | "/org/freedesktop/ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
59 | "org.freedesktop.ScreenSaver" |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
60 | }, { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
61 | "org.gnome.ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
62 | "/org/gnome/ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
63 | "org.gnome.ScreenSaver" |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
64 | }, { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
65 | "org.kde.ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
66 | "/org/kde/ScreenSaver", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
67 | "org.kde.ScreenSaver" |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
68 | }, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
69 | }; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
70 | #endif /* !HAVE_IOKIT && !_WIN32 */ |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
71 | |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
72 | /****************************************************************************** |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
73 | * PurpleIdleUI Implementation |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
74 | *****************************************************************************/ |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
75 | |
|
35455
216a37403c5b
Fix a bunch of gtk-doc warnings in pidgin
Ankit Vani <a@nevitus.org>
parents:
32917
diff
changeset
|
76 | /* |
|
216a37403c5b
Fix a bunch of gtk-doc warnings in pidgin
Ankit Vani <a@nevitus.org>
parents:
32917
diff
changeset
|
77 | * pidgin_get_time_idle: |
|
216a37403c5b
Fix a bunch of gtk-doc warnings in pidgin
Ankit Vani <a@nevitus.org>
parents:
32917
diff
changeset
|
78 | * |
| 11907 | 79 | * Get the number of seconds the user has been idle. In Unix-world |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
80 | * this is based on the DBus ScreenSaver interfaces. In MS Windows this |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
81 | * is based on keyboard/mouse usage information obtained from the OS. |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
82 | * In MacOS X, this is based on keyboard/mouse usage information |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
83 | * obtained from the OS, if configure detected IOKit. Otherwise, |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
84 | * MacOS X is handled as a case of Unix. |
| 11907 | 85 | * |
|
35455
216a37403c5b
Fix a bunch of gtk-doc warnings in pidgin
Ankit Vani <a@nevitus.org>
parents:
32917
diff
changeset
|
86 | * Returns: The number of seconds the user has been idle. |
| 11907 | 87 | */ |
|
12272
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12252
diff
changeset
|
88 | static time_t |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
89 | pidgin_idle_get_idle_time(PurpleIdleUi *ui) { |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
90 | # ifdef HAVE_IOKIT |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
91 | /* Query the IOKit API */ |
|
40041
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
92 | double idleSeconds = -1; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
93 | io_iterator_t iter = 0; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
94 | if (IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("IOHIDSystem"), &iter) == KERN_SUCCESS) { |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
95 | io_registry_entry_t entry = IOIteratorNext(iter); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
96 | if (entry) { |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
97 | CFMutableDictionaryRef dict = NULL; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
98 | kern_return_t status; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
99 | status = IORegistryEntryCreateCFProperties(entry, &dict, kCFAllocatorDefault, 0); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
100 | if (status == KERN_SUCCESS) { |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
101 | CFNumberRef obj = CFDictionaryGetValue(dict, CFSTR("HIDIdleTime")); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
102 | if (obj) { |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
103 | int64_t nanoseconds = 0; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
104 | if (CFNumberGetValue(obj, kCFNumberSInt64Type, &nanoseconds)) { |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
105 | idleSeconds = (double) nanoseconds / NSEC_PER_SEC; |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
106 | } |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
107 | } |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
108 | CFRelease(dict); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
109 | } |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
110 | IOObjectRelease(entry); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
111 | } |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
112 | IOObjectRelease(iter); |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
113 | } |
|
da9efbd154f3
replace spaces with tabs for the new idle tracker for macos
Gary Kramlich <grim@reaperworld.com>
parents:
40039
diff
changeset
|
114 | return idleSeconds; |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
115 | # else |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
116 | # ifdef _WIN32 |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
117 | /* Query Windows */ |
|
15574
18d9d1c05994
Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents:
15562
diff
changeset
|
118 | return (GetTickCount() - winpidgin_get_lastactive()) / 1000; |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
119 | # else |
|
38581
4a451e6f3c66
gtkidle: Use clearer control structure for checking DBus screensavers
Mike Ruprecht <cmaiku@gmail.com>
parents:
38580
diff
changeset
|
120 | static guint idx = 0; |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
121 | GApplication *app; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
122 | GDBusConnection *conn; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
123 | GVariant *reply = NULL; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
124 | guint32 active_time = 0; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
125 | GError *error = NULL; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
126 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
127 | app = g_application_get_default(); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
128 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
129 | if (app == NULL) { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
130 | purple_debug_error("gtkidle", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
131 | "Unable to retrieve GApplication"); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
132 | return 0; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
133 | } |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
134 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
135 | conn = g_application_get_dbus_connection(app); |
| 17129 | 136 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
137 | if (conn == NULL) { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
138 | purple_debug_misc("gtkidle", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
139 | "GApplication lacking DBus connection. " |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
140 | "Skip checking ScreenSaver interface"); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
141 | return 0; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
142 | } |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
143 | |
|
38581
4a451e6f3c66
gtkidle: Use clearer control structure for checking DBus screensavers
Mike Ruprecht <cmaiku@gmail.com>
parents:
38580
diff
changeset
|
144 | for (; idx < G_N_ELEMENTS(screensavers); ++idx) { |
|
4a451e6f3c66
gtkidle: Use clearer control structure for checking DBus screensavers
Mike Ruprecht <cmaiku@gmail.com>
parents:
38580
diff
changeset
|
145 | const PidginDBusScreenSaverInfo *info = &screensavers[idx]; |
|
4a451e6f3c66
gtkidle: Use clearer control structure for checking DBus screensavers
Mike Ruprecht <cmaiku@gmail.com>
parents:
38580
diff
changeset
|
146 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
147 | reply = g_dbus_connection_call_sync(conn, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
148 | info->bus_name, info->object_path, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
149 | info->iface_name, "GetActiveTime", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
150 | NULL, G_VARIANT_TYPE("(u)"), |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
151 | G_DBUS_CALL_FLAGS_NO_AUTO_START, 1000, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
152 | NULL, &error); |
| 17129 | 153 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
154 | if (reply != NULL) { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
155 | break; |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
156 | } |
| 17129 | 157 | |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
158 | if (g_error_matches(error, G_DBUS_ERROR, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
159 | G_DBUS_ERROR_NOT_SUPPORTED)) { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
160 | purple_debug_info("gtkidle", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
161 | "Querying idle time on '%s' " |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
162 | "unsupported. Trying the next one", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
163 | info->bus_name); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
164 | } else if (g_error_matches(error, G_DBUS_ERROR, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
165 | G_DBUS_ERROR_NAME_HAS_NO_OWNER)) { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
166 | purple_debug_info("gtkidle", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
167 | "Querying idle time on '%s' " |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
168 | "not found. Trying the next one", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
169 | info->bus_name); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
170 | } else { |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
171 | purple_debug_error("gtkidle", |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
172 | "Querying idle time on '%s' " |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
173 | "error: %s", info->bus_name, |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
174 | error->message); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
175 | } |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
176 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
177 | g_clear_error(&error); |
| 17129 | 178 | } |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
179 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
180 | if (reply == NULL) { |
|
41134
138d55c90767
Adjust some debug levels which were throwing warning messages when they shouldn't have
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
181 | purple_debug_info("gtkidle", |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
182 | "Failed to query ScreenSaver active time: " |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
183 | "No working ScreenSaver interfaces"); |
| 11907 | 184 | return 0; |
|
38578
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
185 | } |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
186 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
187 | g_variant_get(reply, "(u)", &active_time); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
188 | g_variant_unref(reply); |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
189 | |
|
c81f0a8301fe
gtkidle: Port XScreensaver to DBus ScreenSaver interfaces
Mike Ruprecht <cmaiku@gmail.com>
parents:
35455
diff
changeset
|
190 | return active_time; |
|
13324
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
191 | # endif /* !_WIN32 */ |
|
8ff1c408ef3e
[gaim-migrate @ 15693]
Richard Laager <rlaager@pidgin.im>
parents:
12410
diff
changeset
|
192 | # endif /* !HAVE_IOKIT */ |
|
12278
21bcbadf956d
[gaim-migrate @ 14582]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
193 | } |
| 11907 | 194 | |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
195 | static void |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
196 | pidgin_idle_purple_ui_init(PurpleIdleUiInterface *iface) { |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
197 | iface->get_idle_time = pidgin_idle_get_idle_time; |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
198 | } |
| 11907 | 199 | |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
200 | /****************************************************************************** |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
201 | * GObject Implementation |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
202 | *****************************************************************************/ |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
203 | G_DEFINE_TYPE_EXTENDED( |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
204 | PidginIdle, |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
205 | pidgin_idle, |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
206 | G_TYPE_OBJECT, |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
207 | 0, |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
208 | G_IMPLEMENT_INTERFACE( |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
209 | PURPLE_TYPE_IDLE_UI, |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
210 | pidgin_idle_purple_ui_init |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
211 | ) |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
212 | ); |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
213 | |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
214 | static void |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
215 | pidgin_idle_init(PidginIdle *idle) { |
| 11907 | 216 | } |
|
41136
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
217 | |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
218 | static void |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
219 | pidgin_idle_class_init(PidginIdleClass *klass) { |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
220 | } |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
221 | |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
222 | /****************************************************************************** |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
223 | * Public API |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
224 | *****************************************************************************/ |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
225 | PurpleIdleUi * |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
226 | pidgin_idle_new(void) { |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
227 | return g_object_new(PIDGIN_TYPE_IDLE, NULL); |
|
5397330041d6
Replace PurpleIdleUiOps with the PurpleIdleUi Interface
Gary Kramlich <grim@reaperworld.com>
parents:
41134
diff
changeset
|
228 | } |