annotate src/a11y/atspi.cc @ 30:a76e55e098d1

util: rewrite functions in C-ish there are C++ bindings still put in place. the code should be valid C, except for the use of <regex>, which ought to go anyway. eventually I'll actually *test* this stuff aside from the TrimRight crap
author Paper <paper@tflc.us>
date Sun, 09 Feb 2025 23:18:57 -0500
parents fac2b2d242d3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
1 #include <functional>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
2 #include <string>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <vector>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <memory>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
5
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "animone.h"
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
7 #include "animone/a11y/atspi.h"
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
8
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
9 #include <atspi/atspi.h>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
10
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
11 namespace animone::internal::atspi {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
12
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
13 /* deleters */
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
14 template<typename T>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
15 struct g_object_del {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
16 void operator()(T* p) const { ::g_object_unref(p); };
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
17 };
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
18
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
19 template<typename T>
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
20 using GObjectPtr = std::unique_ptr<T, g_object_del<T>>;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
21
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
22 /* ----------------------------------------------------------------- */
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
23
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
24 // FIXME | atspi_exit()
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
25 bool GetWebBrowserInformation(const Result& result, web_browser_proc_t web_browser_proc) {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
26 GObjectPtr<AtspiAccessible> desktop;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
27 GObjectPtr<AtspiAccessible> application;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
28
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
29 {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
30 int err = atspi_init();
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
31 if (err != 0 && err != 1)
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
32 return false;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
33 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
34
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
35 // Currently only one desktop is supported, so this is equivalent to doing
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
36 // just atspi_get_desktop(0). However it's nice to futureproof where possible.
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
37 for (gint i = 0; i < atspi_get_desktop_count(); i++) {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
38 desktop.reset(atspi_get_desktop(i));
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
39 if (!desktop)
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
40 return false;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
41
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
42 for (gint j = 0; j < atspi_accessible_get_child_count(application.get(), nullptr); j++) {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
43 application.reset(atspi_accessible_get_child_at_index(desktop.get(), j, nullptr));
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
44 if (!application)
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
45 return false;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
46
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
47 GError *error = NULL;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
48
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
49 std::uint32_t pid = atspi_accessible_get_process_id(application.get(), &error);
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
50 if (error) {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
51 ::g_error_free(error);
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
52 return false;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
53 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
54
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
55 if (pid == result.process.pid)
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
56 goto found; // found it
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
57 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
58 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
59
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
60 // didn't get anything... lol
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
61 return false;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
62
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
63 found:
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
64 // found a matching application
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
65
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
66 gchar *title = atspi_accessible_get_name(application.get(), NULL);
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
67 if (title) {
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
68 web_browser_proc({WebBrowserInformationType::Title, title});
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
69 ::g_free(title);
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
70 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
71
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
72 // TODO need to find address and tab? idk
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
73
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
74 return true;
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
75 }
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
76
fac2b2d242d3 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents:
diff changeset
77 }