Spicy 修改代码 实现双屏显示以及鼠标键盘绑定
修改 spicy.c
static SpiceWindow*create_spice_window(spice_connection *conn, SpiceChannel *channel, int id,gint monitor_id)
{
//注释掉的地方 就是隐藏菜单、工具栏和状态栏
gtk_container_set_border_width(GTK_CONTAINER(vbox), 0);
gtk_container_add(GTK_CONTAINER(win->toplevel), vbox);
//gtk_box_pack_start(GTK_BOX(vbox), win->menubar, FALSE, FALSE, 0);zy
//gtk_box_pack_start(GTK_BOX(vbox), win->toolbar, FALSE, FALSE, 0);zy
gtk_box_pack_start(GTK_BOX(vbox), win->spice, TRUE, TRUE, 0);
//gtk_box_pack_end(GTK_BOX(vbox), win->statusbar, FALSE, TRUE, 0);zy
/* show window */
if (fullscreen)
{//zy 修改fullscreen 的功能,使其变成左屏显示(什么都不加为右屏显示)
//printf("fullscreen:%s\n",fullscreen);//zy
// gtk_window_fullscreen(GTK_WINDOW(win->toplevel));zy
gtk_window_set_default_size(GTK_WINDOW(win->toplevel),1000,600);//zy 设置窗口大小
gtk_window_set_decorated(GTK_WINDOW(win->toplevel),FALSE);// add---zy
gtk_window_move(GTK_WINDOW(win->toplevel),0,0);// add---zy 设置窗口起始位置
}//zy
Else //右屏显示
{
gtk_window_set_default_size(GTK_WINDOW(win->toplevel),1000,600);//zy
gtk_window_set_decorated(GTK_WINDOW(win->toplevel),FALSE);// add---zy
gtk_window_move(GTK_WINDOW(win->toplevel),100,100);// add---zy
}
}
static void menu_cb_select_usb_devices(GtkAction*action, void *data)
{
gtk_box_set_spacing(GTK_BOX(gtk_bin_get_child(GTK_BIN(dialog))), 12);
area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
usb_device_widget = spice_usb_device_widget_new(win->conn->session,
NULL,fullscreen); /* default format */ //zy 加入一个bool型的参数
g_signal_connect(usb_device_widget, "connect-failed",
G_CALLBACK(usb_connect_failed), NULL);
gtk_box_pack_start(GTK_BOX(area), usb_device_widget, TRUE, TRUE, 0);
}
static void display_monitors(SpiceChannel*display, GParamSpec *pspec,
spice_connection*conn)
{
w = create_spice_window(conn, display, id,i);
add_window(conn, w);
spice_g_signal_connect_object(display, "display-mark",
G_CALLBACK(display_mark), w, 0);
gtk_widget_show(w->toplevel);
menu_cb_select_usb_devices(NULL,(void*)w); //zy-add 调用函数,自动实现窗口菜单栏的点击消息发送
update_auto_usbredir_sensitive(conn);
}
usb-device-widget.h
修改函数声明
GtkWidget*spice_usb_device_widget_new(SpiceSession *session,
constgchar *device_format_string,
gboolean fullscreen);//zy
usb-device-widget.c
加入功能(将两套键盘鼠标的ID存在指定的文件里,以便窗口启动时根据ID绑定对应的设备)
static GObject*spice_usb_device_widget_constructor(
GType gtype,guint n_properties, GObjectConstructParam *properties)
{
//----------------------------add-----------------zy
gchar *desc;
char list_r[24]="";
char list_l[24]="";
int flag_mouse = 0;
int flag_keyboard = 0;
for (i = 0; i < devices->len; i++)
{
desc = spice_usb_device_get_description(g_ptr_array_index(devices, i),
priv->device_format_string);
char *token = strtok(desc," ");
while(token != NULL)
{
if(strcmp(token,"Mouse") == 0 ||strcmp(token,"MOUSE") == 0)
{
token = strtok(NULL,"");
if(flag_mouse == 0)
{
strcat(list_r,token);
flag_mouse++;
}
else
{
strcat(list_l,token);
}
}
if(strcmp(token,"Keyboard") == 0 ||strcmp(token,"KEYBOARD") == 0)
{
token = strtok(NULL,"");
if(flag_keyboard == 0)
{
strcat(list_r,token);
flag_keyboard++;
}
else
{
strcat(list_l,token);
}
}
token = strtok(NULL,"");
}
}
g_free(desc); //zy-add--
FILE *fp;
fp=fopen("/root/right.txt","w+");
if(fp==NULL)return;
fputs(list_r,fp);
fclose(fp);
fp=fopen("/root/left.txt","w+");
if(fp==NULL)return;
fputs(list_l,fp);
fclose(fp);
//----------------------------end----------------
}
添加功能,程序读取配置文件信息,一次比较将usb设备绑定到虚拟机内
static voiddevice_added_cb(SpiceUsbDeviceManager *manager,
SpiceUsbDevice*device, gpointer user_data)
{
//----------------------------------add------------zy----------
char str1[12];
char str2[12];
FILE *fp;
if(flag_r_screen)
{
fp = fopen("/root/right.txt","r+");
if(fp == NULL) return;
}
else
{
fp = fopen("/root/left.txt","r+");
if(fp == NULL) return;
}
fgets(str1,12,fp);
fgets(str2,12,fp);
fclose(fp);
printf("%s\n",str1);
printf("%s\n",str2);
g_print(_("zy5_1_description:%s\n"),desc);
char *token = strtok(desc," ");
while(token != NULL)
{
if(strcmp(token,str1) == 0 || strcmp(token,str2) == 0)
{
checkbox_clicked_cb(check,self);
}
token = strtok(NULL," ");
}
g_free(desc);
//---------------------------------end-------------------
}
修改点击事件处理函数,屏蔽掉状态的筛选,直接将传过来的设备添加到虚拟机中
static void checkbox_clicked_cb(GtkWidget*check, gpointer user_data)
{
/* zy---del
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check))) {
connect_cb_data *data = g_new(connect_cb_data, 1);
data->check = g_object_ref(check);
data->self =g_object_ref(self);
spice_usb_device_manager_connect_device_async(priv->manager,
device,
NULL,
connect_cb,
data);
}else {
spice_usb_device_manager_disconnect_device(priv->manager,
device);
}
spice_usb_device_widget_update_status(self);
*/
///---------------------add----------------zy
connect_cb_data *data = g_new(connect_cb_data, 1);
data->check = g_object_ref(check);
data->self =g_object_ref(self);
spice_usb_device_manager_connect_device_async(priv->manager,
device,
NULL,
connect_cb,
data);
//------------------------end----------------------zy------
}
————————————————
版权声明:本文为CSDN博主「傻呆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21398167/article/details/50804271
Spicy 修改代码 实现双屏显示以及鼠标键盘绑定相关推荐
- 在window的cmd命令行中通过chcp修改代码页--正确显示utf-8字符
Mt8616的开发板通过adb工具可以在Windows系统的cmd命令行显示出debug信息,但是mt8516开发板的系统上是移植的裁剪的linux系统,也就是里面的文件是utf-8的编码形式,不能正 ...
- 双屏显示时鼠标如何从左(右)侧移入另一屏
鼠标拖动两个屏幕位置交换即可
- 记录一下idea修改代码之后还是显示原程序不能提交代码的问题
在网上看了一下原因就是要配置class输出路径,请按下ctrl+shift+alt+s:
- Selenium 利用 JS/JQ 操作元素、鼠标键盘事件、Cookie 操作
今天是持续写作的第 26 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客主要学习 Selenium 中如何利用 JavaScript 与 JQuery 操作页面元素,以及 ...
- win10 双屏显示 鼠标可以从主屏幕左侧滑入右侧竖屏
win10 双屏显示 鼠标可以从主屏幕左侧滑入右侧竖屏 把之前的位置用鼠标拖拽一下,放到左边即可.
- SVN 检查修改或者提交代码时候一直显示please wait的解决办法(汉化版本显示请稍候)
在提交使用vue写的前端代码时候一直显示"请稍候",检查修改时候也是这样显示. 原因是 : 下载代码后 npm install 安装了依赖. 可以在SVN中取消对相关依赖的控制. ...
- 解决问题:ubuntu双屏显示的时候,鼠标从左屏幕向右切在边界处会卡顿,需要快速移动鼠标冲过
问题描述: ubuntu双屏显示的时候,鼠标从左屏幕向右切在边界处会卡顿: 解决办法: 快速移动鼠标冲过 在系统设置下选择显示,双击后关闭粘滞边缘选项即可 不敢相信,我忍受了三个星期的问题今天终于解决 ...
- SourceInsight 修改代码后无法保存,显示“xxx is busy or opened by another process”
SourceInsight 修改代码后无法保存,显示"xxx is busy or opened by another process" 是文件夹权限的问题,更新一下权限就行 ch ...
- IDEA几个设置:设置空格显示成小点、显示行数、 Ctrl + 鼠标滚轮 快捷键来控制代码字体大小显示、护眼背景色
1.设置空格显示成小点和显示行数,最初如图所示 1.1 现在进行设置,设置如图. 1.2 设置后有行数显示,空格变成小点显示效果图. 2.Ctrl + 鼠标滚轮 快捷键来控制代码字体大小显示 3.设置 ...
最新文章
- 谨慎使用PHP的引用
- ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决
- poj 2524 Ubiquitous Religions (并查集)
- Javascript 面向对象编程中的‘new’
- 深入理解JS中this关键字
- 使用HTML5技术开发的超酷颜色选择器
- pytorch必须掌握的的4种学习率衰减策略
- xp系统web服务器搭建教程,Windows_XP配置WEB服务器教程(图)
- python3打包exe运行没反应_python selenium运行,打包exe常见问题解决方法
- 前端学习(1349):用户的增删改查操作6删除
- 如何成为一个技术“牛人”
- android 绘图流程,Android View绘制流程
- linux等候脚本,linux – 在bash脚本中继续之前等待通过ssh运行的脚本完成
- 【STM32F407F429H7的DSP教程】第34章 滤波器基础知识
- RANSAC算法思想与实现点云粗配准
- MiroTik 路由器配置无线中继模式(超细教程)
- usnews2015美国大学计算机排名,2019USNews美国大学计算机专业排名
- 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)
- 【NOIP模拟】序列
- 选择面向 USB4 数据线的 ESD 保护