[gtk-vnc] examples: wire up a menu for power control options



commit 89a955b767c991b53359d9b50c9fa924817687be
Author: Daniel P. Berrangé <dan berrange com>
Date:   Fri Dec 11 13:55:30 2020 +0000

    examples: wire up a menu for power control options
    
    Signed-off-by: Daniel P. Berrangé <berrange redhat com>

 examples/gvncviewer.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)
---
diff --git a/examples/gvncviewer.c b/examples/gvncviewer.c
index b05b4f3..52da3eb 100644
--- a/examples/gvncviewer.c
+++ b/examples/gvncviewer.c
@@ -227,6 +227,16 @@ static void vnc_mouse_ungrab(GtkWidget *vncdisplay, GtkWidget *window)
     set_title(VNC_DISPLAY(vncdisplay), window, FALSE);
 }
 
+static void vnc_power_control_init(GtkWidget *vncdisplay G_GNUC_UNUSED, GtkWidget *power)
+{
+    gtk_widget_set_sensitive(power, TRUE);
+}
+
+static void vnc_power_control_failed(GtkWidget *vncdisplay G_GNUC_UNUSED)
+{
+    g_printerr("Unable to perform power control request\n");
+}
+
 static int connected = 0;
 
 static void vnc_connected(GtkWidget *vncdisplay G_GNUC_UNUSED)
@@ -386,6 +396,32 @@ static void do_smoothing(GtkWidget *menu, GtkWidget *vncdisplay)
         vnc_display_set_smoothing(VNC_DISPLAY(vncdisplay), FALSE);
 }
 
+static void do_power_control(VncDisplay *vncdisplay, VncConnectionPowerAction action)
+{
+    VncConnection *conn = vnc_display_get_connection(vncdisplay);
+
+    if (!vnc_connection_get_power_control(conn)) {
+        g_printerr("Power control not available on this server\n");
+        return;
+    }
+    vnc_connection_power_control(conn, action);
+}
+
+static void do_shutdown(GtkWidget *menu G_GNUC_UNUSED, GtkWidget *vncdisplay)
+{
+    do_power_control(VNC_DISPLAY(vncdisplay), VNC_CONNECTION_POWER_ACTION_SHUTDOWN);
+}
+
+static void do_reboot(GtkWidget *menu G_GNUC_UNUSED, GtkWidget *vncdisplay)
+{
+    do_power_control(VNC_DISPLAY(vncdisplay), VNC_CONNECTION_POWER_ACTION_REBOOT);
+}
+
+static void do_reset(GtkWidget *menu G_GNUC_UNUSED, GtkWidget *vncdisplay)
+{
+    do_power_control(VNC_DISPLAY(vncdisplay), VNC_CONNECTION_POWER_ACTION_RESET);
+}
+
 static void dialog_update_keysyms(GtkWidget *window, guint *keysyms, guint numsyms)
 {
     gchar *keys;
@@ -641,7 +677,7 @@ int main(int argc, char **argv)
     GtkWidget *window;
     GtkWidget *layout;
     GtkWidget *menubar;
-    GtkWidget *sendkey, *view, *settings;
+    GtkWidget *sendkey, *view, *settings, *power;
     GtkWidget *submenu;
     GtkWidget *caf1;
     GtkWidget *caf2;
@@ -657,6 +693,9 @@ int main(int argc, char **argv)
     GtkWidget *scaling;
     GtkWidget *smoothing;
     GtkWidget *showgrabkeydlg;
+    GtkWidget *shutdown;
+    GtkWidget *reboot;
+    GtkWidget *reset;
     const char *help_msg = "Run 'gvncviewer --help' to see a full list of available command line options";
     GSList *accels;
 
@@ -748,6 +787,22 @@ int main(int argc, char **argv)
 
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(settings), submenu);
 
+    power = gtk_menu_item_new_with_mnemonic("_Power");
+    gtk_widget_set_sensitive(power, FALSE);
+    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), power);
+
+    submenu = gtk_menu_new();
+
+    shutdown = gtk_menu_item_new_with_mnemonic("_Shutdown");
+    reboot = gtk_menu_item_new_with_mnemonic("_Reboot");
+    reset = gtk_menu_item_new_with_mnemonic("Rese_t");
+
+    gtk_menu_shell_append(GTK_MENU_SHELL(submenu), shutdown);
+    gtk_menu_shell_append(GTK_MENU_SHELL(submenu), reboot);
+    gtk_menu_shell_append(GTK_MENU_SHELL(submenu), reset);
+
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM(power), submenu);
+
     gtk_box_pack_start(GTK_BOX(layout), menubar, FALSE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(layout), vnc, TRUE, TRUE, 0);
     gtk_container_add(GTK_CONTAINER(window), layout);
@@ -832,6 +887,10 @@ int main(int argc, char **argv)
     g_signal_connect(vnc, "vnc-keyboard-ungrab",
                      G_CALLBACK(vnc_key_ungrab), window);
 
+    g_signal_connect(vnc, "vnc-power-control-initialized",
+                     G_CALLBACK(vnc_power_control_init), power);
+    g_signal_connect(vnc, "vnc-power-control-failed",
+                     G_CALLBACK(vnc_power_control_failed), power);
 
     g_signal_connect(window, "key-press-event",
                      G_CALLBACK(vnc_screenshot), vnc);
@@ -864,6 +923,12 @@ int main(int argc, char **argv)
                      G_CALLBACK(do_scaling), vnc);
     g_signal_connect(smoothing, "toggled",
                      G_CALLBACK(do_smoothing), vnc);
+    g_signal_connect(shutdown, "activate",
+                     G_CALLBACK(do_shutdown), vnc);
+    g_signal_connect(reboot, "activate",
+                     G_CALLBACK(do_reboot), vnc);
+    g_signal_connect(reset, "activate",
+                     G_CALLBACK(do_reset), vnc);
 
     gtk_main();
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]