pidgin/gtkidle.c

Fri, 22 Oct 2021 03:33:32 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 22 Oct 2021 03:33:32 -0500
changeset 41136
5397330041d6
parent 41134
138d55c90767
child 41152
1dda9fb5d8ae
permissions
-rw-r--r--

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
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