~remmina-ppa-team/remmina-ppa/remmina-next

« back to all changes in this revision

Viewing changes to remmina-plugins/spice/spice_plugin.c

  • Committer: Denis Ollier
  • Date: 2016-08-29 19:40:38 UTC
  • Revision ID: git-v1:0967c059886da3e3b9e2e1b223558c60e74db0e4
spice: split code into multiple files

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 *
33
33
 */
34
34
 
35
 
#include "common/remmina_plugin.h"
36
 
#include <spice-client.h>
37
 
#ifdef SPICE_GTK_CHECK_VERSION
38
 
#  if SPICE_GTK_CHECK_VERSION(0, 31, 0)
39
 
#    include <spice-client-gtk.h>
40
 
#  else
41
 
#    include <spice-widget.h>
42
 
#    include <usb-device-widget.h>
43
 
#  endif
44
 
#else
45
 
#  include <spice-widget.h>
46
 
#  include <usb-device-widget.h>
47
 
#endif
 
35
#include "spice_plugin.h"
48
36
 
49
37
#define XSPICE_DEFAULT_PORT 5900
50
38
 
51
 
#define GET_PLUGIN_DATA(gp) (RemminaPluginSpiceData*) g_object_get_data(G_OBJECT(gp), "plugin-data")
52
 
 
53
39
enum
54
40
{
55
41
        REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY = 1,
60
46
        REMMINA_PLUGIN_SPICE_FEATURE_SCALE
61
47
};
62
48
 
63
 
typedef struct _RemminaPluginSpiceData
64
 
{
65
 
        SpiceAudio *audio;
66
 
        SpiceDisplay *display;
67
 
        SpiceDisplayChannel *display_channel;
68
 
        SpiceGtkSession *gtk_session;
69
 
        SpiceMainChannel *main_channel;
70
 
        SpiceSession *session;
71
 
} RemminaPluginSpiceData;
72
 
 
73
49
static RemminaPluginService *remmina_plugin_service = NULL;
74
50
 
75
51
static void remmina_plugin_spice_channel_new_cb(SpiceSession *, SpiceChannel *, RemminaProtocolWidget *);
77
53
static void remmina_plugin_spice_display_ready_cb(GObject *, GParamSpec *, RemminaProtocolWidget *);
78
54
static void remmina_plugin_spice_update_scale(RemminaProtocolWidget *);
79
55
 
 
56
void remmina_plugin_spice_select_usb_devices(RemminaProtocolWidget *);
 
57
 
80
58
static void remmina_plugin_spice_init(RemminaProtocolWidget *gp)
81
59
{
82
60
        TRACE_CALL(__func__);
369
347
        }
370
348
}
371
349
 
372
 
static void remmina_plugin_spice_usb_connect_failed_cb(GObject *object, SpiceUsbDevice *usb_device, GError *error, RemminaProtocolWidget *gp)
373
 
{
374
 
        TRACE_CALL(__func__);
375
 
 
376
 
        GtkWidget *dialog;
377
 
 
378
 
        if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_CANCELLED)
379
 
        {
380
 
                return;
381
 
        }
382
 
 
383
 
        /*
384
 
         * FIXME: Use the RemminaConnectionWindow as transient parent widget
385
 
         * (and add the GTK_DIALOG_DESTROY_WITH_PARENT flag) if it becomes
386
 
         * accessible from the Remmina plugin API.
387
 
         */
388
 
        dialog = gtk_message_dialog_new(NULL,
389
 
                                        GTK_DIALOG_MODAL,
390
 
                                        GTK_MESSAGE_ERROR,
391
 
                                        GTK_BUTTONS_CLOSE,
392
 
                                        _("USB redirection error"));
393
 
        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
394
 
                                                 "%s",
395
 
                                                 error->message);
396
 
        gtk_dialog_run(GTK_DIALOG(dialog));
397
 
        gtk_widget_destroy(dialog);
398
 
}
399
 
 
400
 
static void remmina_plugin_spice_select_usb_devices(RemminaProtocolWidget *gp)
401
 
{
402
 
        TRACE_CALL(__func__);
403
 
 
404
 
        GtkWidget *dialog, *usb_device_widget;
405
 
        RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp);
406
 
 
407
 
        /*
408
 
         * FIXME: Use the RemminaConnectionWindow as transient parent widget
409
 
         * (and add the GTK_DIALOG_DESTROY_WITH_PARENT flag) if it becomes
410
 
         * accessible from the Remmina plugin API.
411
 
         */
412
 
        dialog = gtk_dialog_new_with_buttons(_("Select USB devices for redirection"),
413
 
                                             NULL,
414
 
                                             GTK_DIALOG_MODAL,
415
 
                                             _("_Close"),
416
 
                                             GTK_RESPONSE_ACCEPT,
417
 
                                             NULL);
418
 
        gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
419
 
 
420
 
        usb_device_widget = spice_usb_device_widget_new(gpdata->session, NULL);
421
 
        g_signal_connect(usb_device_widget,
422
 
                         "connect-failed",
423
 
                         G_CALLBACK(remmina_plugin_spice_usb_connect_failed_cb),
424
 
                         gp);
425
 
 
426
 
        gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
427
 
                           usb_device_widget,
428
 
                           TRUE,
429
 
                           TRUE,
430
 
                           0);
431
 
        gtk_widget_show_all(dialog);
432
 
        gtk_dialog_run(GTK_DIALOG(dialog));
433
 
        gtk_widget_destroy(dialog);
434
 
}
435
 
 
436
350
static gboolean remmina_plugin_spice_query_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
437
351
{
438
352
        TRACE_CALL(__func__);