summaryrefslogtreecommitdiff
path: root/rcm-client-main.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2015-07-08 23:16:06 +0200
committerDavid Härdeman <david@hardeman.nu>2015-07-08 23:16:06 +0200
commit018efc8ef96a77529507b8a1614067821be8b90d (patch)
treec9ddacf9f800a63131d7bfa9a241d379f389701c /rcm-client-main.c
parentce38f3d01c76327fcbeadccf125f7e7540ed4721 (diff)
Add simple test client embryo
Diffstat (limited to 'rcm-client-main.c')
-rw-r--r--rcm-client-main.c216
1 files changed, 216 insertions, 0 deletions
diff --git a/rcm-client-main.c b/rcm-client-main.c
new file mode 100644
index 0000000..cd119a3
--- /dev/null
+++ b/rcm-client-main.c
@@ -0,0 +1,216 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <math.h>
+#include <gtk/gtk.h>
+
+#include "generated.h"
+#include "rcm-client-main.h"
+#include "rcm-client-hardware-list.h"
+
+#define WINDOW_WIDTH 300
+#define WINDOW_HEIGHT 300
+
+static GDBusObjectManager *mgr = NULL;
+
+struct global_variables *global;
+
+void
+poke_objects()
+{
+ GList *objects;
+ GList *l;
+ GDBusObjectManager *manager = mgr;
+
+ objects = g_dbus_object_manager_get_objects (manager);
+ for (l = objects; l != NULL; l = l->next)
+ {
+ GDBusInterface *interface;
+
+ interface = g_dbus_object_get_interface(G_DBUS_OBJECT(l->data),
+ "org.gnome.RemoteControlManager.Device");
+ if (!interface) {
+ g_print("That's weird, an object which is not a device...\n");
+ continue;
+ }
+
+ RCDevice *object = RCDEVICE(interface);
+ gchar *reply = NULL;
+ rcdevice_call_echo_string_sync(object, "Roeven", &reply, NULL, NULL);
+ printf("Called object %s: %s\n", g_dbus_object_get_object_path (G_DBUS_OBJECT(l->data)), reply);
+ printf("Driver name is: %s\n", rcdevice_get_driver_name(object));
+ printf("Keymap name is: %s\n", rcdevice_get_kernel_keymap_name(object));
+ g_free(reply);
+
+ g_object_unref(interface);
+ }
+ g_list_free_full (objects, g_object_unref);
+}
+
+void
+poke_objects2()
+{
+ GList *objects;
+ GList *l;
+ GDBusObjectManager *manager = mgr;
+
+ objects = g_dbus_object_manager_get_objects (manager);
+ for (l = objects; l != NULL; l = l->next)
+ {
+ GDBusInterface *interface;
+
+ interface = g_dbus_object_get_interface(G_DBUS_OBJECT(l->data),
+ "org.gnome.RemoteControlManager.IRDevice");
+ if (!interface) {
+ g_print("That's weird, an object which is not an ir device...\n");
+ continue;
+ }
+
+ RCIRDevice *object = RCIRDEVICE(interface);
+ GVariant *reply = NULL;
+ rcirdevice_call_get_irrxparameters_sync(object, &reply, NULL, NULL);
+
+ printf("Got a reply %p\n", reply);
+ gchar *ans = NULL;
+
+ g_variant_lookup(reply, "name", "s", &ans);
+ printf("The rsult is %s\n", ans);
+/*
+ printf("Called object %s: %s\n", g_dbus_object_get_object_path (G_DBUS_OBJECT(l->data)), reply);
+ printf("Driver name is: %s\n", rcdevice_get_driver_name(object));
+ printf("Keymap name is: %s\n", rcdevice_get_kernel_keymap_name(object));
+ */
+ //g_free(reply);
+
+ g_object_unref(interface);
+ }
+ g_list_free_full (objects, g_object_unref);
+}
+
+static void
+on_object_added(GDBusObjectManager *manager,
+ GDBusObject *object,
+ gpointer user_data)
+{
+ g_print("Added object at %s\n", g_dbus_object_get_object_path(object));
+ rcng_client_hardware_list_add(object);
+}
+
+static void
+on_object_removed(GDBusObjectManager *manager,
+ GDBusObject *object,
+ gpointer user_data)
+{
+ g_print("Removed object at %s\n", g_dbus_object_get_object_path(object));
+ rcng_client_hardware_list_remove(object);
+}
+
+static void
+on_owner_change(GDBusObjectManager *manager, gpointer user_data)
+{
+ g_print("Owner changed, now: %s\n", g_dbus_object_manager_client_get_name_owner(G_DBUS_OBJECT_MANAGER_CLIENT(manager)));
+
+ if (!g_dbus_object_manager_client_get_name_owner(G_DBUS_OBJECT_MANAGER_CLIENT(manager)))
+ rcng_client_hardware_list_update_status("Server not running...\n");
+ else
+ rcng_client_hardware_list_update_status("No hardware connected...");
+}
+
+static void
+manager_ready_cb(GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GError *error = NULL;
+ GList *objects;
+ GList *l;
+
+ mgr = object_manager_client_new_for_bus_finish(res, &error);
+ if (!mgr) {
+ gchar *msg;
+
+ msg = g_strdup_printf("Error creating object manager client: %s",
+ error->message);
+ rcng_client_hardware_list_update_status(msg);
+
+ g_free(msg);
+ g_error_free(error);
+ return;
+ }
+
+ g_signal_connect(mgr, "object-added", G_CALLBACK(on_object_added), NULL);
+ g_signal_connect(mgr, "object-removed", G_CALLBACK(on_object_removed), NULL);
+ g_signal_connect(mgr, "notify::name-owner", G_CALLBACK(on_owner_change), NULL);
+
+ on_owner_change(mgr, NULL);
+ g_print("Object manager at %s\n", g_dbus_object_manager_get_object_path(mgr));
+ objects = g_dbus_object_manager_get_objects(mgr);
+ for (l = objects; l != NULL; l = l->next) {
+ rcng_client_hardware_list_add(G_DBUS_OBJECT(l->data));
+ rcng_client_hardware_list_add(G_DBUS_OBJECT(l->data));
+ }
+
+ g_list_free_full (objects, g_object_unref);
+
+}
+
+int main (int argc, char *argv[])
+{
+ GtkWidget *win;
+ GdkScreen *screen;
+ gint monitor;
+ GdkRectangle rect;
+
+ global = g_malloc(sizeof(*global));
+
+ gtk_init (&argc, &argv);
+
+ object_manager_client_new_for_bus(G_BUS_TYPE_SESSION,
+ G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
+ "org.gnome.RemoteControlManager",
+ "/org/gnome/RemoteControlManager",
+ NULL, manager_ready_cb, NULL);
+
+ win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ global->window = GTK_WINDOW(win);
+ g_signal_connect(win, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+ screen = gtk_window_get_screen(global->window);
+ monitor = gdk_screen_get_monitor_at_point(screen, 0, 0);
+ gdk_screen_get_monitor_geometry(screen, monitor, &rect);
+ gtk_window_set_default_size(global->window,
+ rect.width * 4 / 5,
+ rect.height * 1 / 2);
+
+ global->header = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_header_bar_set_title(global->header, "Remote Control Configuration");
+ gtk_header_bar_set_has_subtitle(global->header, FALSE);
+ gtk_header_bar_set_show_close_button(global->header, TRUE);
+ gtk_window_set_titlebar(global->window, GTK_WIDGET(global->header));
+
+ /*
+ GtkWidget *label;
+ label = gtk_label_new("Pack Start");
+ gtk_header_bar_pack_start(GTK_HEADER_BAR(header), label);
+ label = gtk_label_new("Pack End");
+ gtk_header_bar_pack_end(GTK_HEADER_BAR(header), label);
+ GtkWidget *test = gtk_button_new_from_icon_name("gtk-add", GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_label(GTK_BUTTON(test), "Test");
+ gtk_button_set_always_show_image(GTK_BUTTON(test), TRUE);
+ gtk_header_bar_pack_end(GTK_HEADER_BAR(header), test);
+ */
+
+
+ global->notebook = GTK_NOTEBOOK(gtk_notebook_new());
+ gtk_notebook_set_tab_pos(global->notebook, GTK_POS_LEFT);
+
+ rcng_client_hardware_list_init_ui(global->notebook);
+
+ gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(global->notebook));
+ //gtk_window_set_title(window, "Remote Control Configuration");
+ gtk_window_set_icon_name(global->window, "gnome-multimedia");
+ gtk_widget_show_all(win);
+
+ gtk_main();
+
+ return 0;
+}