pidgin/gtkidle.c

Tue, 26 Oct 2021 04:05:39 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 26 Oct 2021 04:05:39 -0500
changeset 41144
910bdda75c74
parent 41136
5397330041d6
child 41152
1dda9fb5d8ae
permissions
-rw-r--r--

Move the pidgin_pixbuf stuff to pidgingdkpixbuf.[ch]

Testing Done:
Compiled

Reviewed at https://reviews.imfreedom.org/r/1100/

11907
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
4 *
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
7 * the Free Software Foundation; either version 2 of the License, or
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
8 * (at your option) any later version.
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
9 *
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
13 * GNU General Public License for more details.
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
14 *
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
0d4fb3e148bb Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16752
diff changeset
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
0d4fb3e148bb Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16752
diff changeset
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
0d4fb3e148bb Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16752
diff changeset
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
0d4fb3e148bb Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16752
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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
de3ea77afe3c [gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
diff changeset
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 }

mercurial