Hi, On Thu, Aug 04, 2016 at 06:34:14AM -0700, Dmitry Fleytman wrote: > Hi Victor, > > How do we configure server mouse with VDAgent running? You mean the host/VM configuration? What I mean by my question is that we can send a SpiceMsgcMainMouseModeRequest from client to change mouse mode and I would like to know if that would still be possible with this patch. Check: https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=5f89a4df037f6a1f2 > > Thanks, > Dmitry > > > On Thu, Aug 4, 2016 at 6:30 AM, Victor Toso <lists@xxxxxxxxxxxxxx> wrote: > > > Hi, > > > > On Wed, Aug 03, 2016 at 06:45:29PM +0300, Sameeh Jubran wrote: > > > This patch adds new ioctl operation to Vdagent in order to update > > > the driver on Vdagent state. This allows the driver to know > > > when Vdagent is running and when it is off. > > > > > > Spice supports two mouse modes: server and client. The server mouse > > > mode pointer should be enabled when vdagent is off and the client > > > mouse mode should be enabled when it is on. The mouse mode > > > is updated by the driver and thus this patch is needed. > > > > Just to be sure. I can still have mouse in server mode when VDAgent is > > running? > > > > toso > > > > > > > > Signed-off-by: Sameeh Jubran <sameeh@xxxxxxxxxx> > > > --- > > > vdagent/desktop_layout.cpp | 21 +++++++++++++++++++++ > > > vdagent/desktop_layout.h | 1 + > > > vdagent/display_configuration.cpp | 16 ++++++++++++++++ > > > vdagent/display_configuration.h | 3 ++- > > > 4 files changed, 40 insertions(+), 1 deletion(-) > > > > > > diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp > > > index 9c3e873..4d183e1 100644 > > > --- a/vdagent/desktop_layout.cpp > > > +++ b/vdagent/desktop_layout.cpp > > > @@ -45,6 +45,7 @@ DesktopLayout::DesktopLayout() > > > > > > DesktopLayout::~DesktopLayout() > > > { > > > + set_vdagent_running_for_displays(false); > > > clean_displays(); > > > delete _display_config; > > > } > > > @@ -121,6 +122,8 @@ void DesktopLayout::set_displays() > > > DWORD display_id = 0; > > > int dev_sets = 0; > > > > > > + set_vdagent_running_for_displays(true); > > > + > > > lock(); > > > if (!consistent_displays()) { > > > unlock(); > > > @@ -275,6 +278,22 @@ bool DesktopLayout::get_qxl_device_id(WCHAR* > > device_key, DWORD* device_id) > > > return key_found; > > > } > > > > > > +void DesktopLayout::set_vdagent_running_for_displays(bool running) > > > +{ > > > + DISPLAY_DEVICE dev_info; > > > + DWORD dev_id = 0; > > > + lock(); > > > + ZeroMemory(&dev_info, sizeof(dev_info)); > > > + dev_info.cb = sizeof(dev_info); > > > + while (EnumDisplayDevices(NULL, dev_id, &dev_info, 0)) { > > > + dev_id++; > > > + if (!(dev_info.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) > > && wcsstr(dev_info.DeviceString, L"QXL")) { > > > + _display_config->set_vdagent_running(dev_info.DeviceName, > > running); > > > + } > > > + } > > > + unlock(); > > > +} > > > + > > > bool DesktopLayout::init_dev_mode(LPCTSTR dev_name, DEVMODE* dev_mode, > > DisplayMode* mode) > > > { > > > ZeroMemory(dev_mode, sizeof(DEVMODE)); > > > @@ -298,6 +317,8 @@ bool DesktopLayout::init_dev_mode(LPCTSTR dev_name, > > DEVMODE* dev_mode, DisplayMo > > > // update current DisplayMode (so mouse scaling works properly) > > > mode->_width = dev_mode->dmPelsWidth; > > > mode->_height = dev_mode->dmPelsHeight; > > > + > > > + set_vdagent_running_for_displays(true); > > > return true; > > > > > > } > > > diff --git a/vdagent/desktop_layout.h b/vdagent/desktop_layout.h > > > index fd6af76..da5a40b 100644 > > > --- a/vdagent/desktop_layout.h > > > +++ b/vdagent/desktop_layout.h > > > @@ -83,6 +83,7 @@ private: > > > static bool consistent_displays(); > > > static bool is_attached(LPCTSTR dev_name); > > > static bool get_qxl_device_id(WCHAR* device_key, DWORD* device_id); > > > + void set_vdagent_running_for_displays(bool enable_pointer); > > > private: > > > mutex_t _mutex; > > > Displays _displays; > > > diff --git a/vdagent/display_configuration.cpp b/vdagent/display_ > > configuration.cpp > > > index 4565b15..7e617b6 100755 > > > --- a/vdagent/display_configuration.cpp > > > +++ b/vdagent/display_configuration.cpp > > > @@ -248,6 +248,16 @@ struct WDDMMonitorConfigEscape { > > > QXLHead _head; > > > }; > > > > > > +struct WDDMVDAgentRunningEscape { > > > + WDDMVDAgentRunningEscape(bool running) > > > + { > > > + _ioctl = QXL_ESCAPE_VDAGENT_RUNNING; > > > + _vdagent_state.running = running; > > > + } > > > + int _ioctl; > > > + QXLEscapeVDAgentRunning _vdagent_state; > > > +}; > > > + > > > DisplayConfig* DisplayConfig::create_config() > > > { > > > DisplayConfig* new_interface; > > > @@ -690,6 +700,12 @@ bool WDDMInterface::escape(LPCTSTR device_name, > > void* data, UINT size_data) > > > return NT_SUCCESS(status); > > > } > > > > > > +bool WDDMInterface::set_vdagent_running(LPCTSTR device_name, bool > > running) > > > +{ > > > + WDDMVDAgentRunningEscape wddm_escape(running); > > > + return escape(device_name, &wddm_escape, sizeof(wddm_escape)); > > > +} > > > + > > > CCD::CCD() > > > :_NumPathElements(0) > > > ,_NumModeElements(0) > > > diff --git a/vdagent/display_configuration.h b/vdagent/display_ > > configuration.h > > > index b3d0198..e8ba2f0 100755 > > > --- a/vdagent/display_configuration.h > > > +++ b/vdagent/display_configuration.h > > > @@ -107,7 +107,7 @@ public: > > > virtual bool update_dev_mode_position(LPCTSTR dev_name, DEVMODE* > > dev_mode, LONG x, LONG y) = 0; > > > void set_monitors_config(bool flag) { _send_monitors_config = flag; > > } > > > virtual void update_config_path() {}; > > > - > > > + virtual bool set_vdagent_running(LPCTSTR device_name, bool running) > > { return false; }; > > > protected: > > > bool _send_monitors_config; > > > }; > > > @@ -162,6 +162,7 @@ private: > > > > > > void close_adapter(D3D_HANDLE handle); > > > bool escape(LPCTSTR device_name, void* data, UINT sizeData); > > > + bool set_vdagent_running(LPCTSTR device_name, bool running); > > > > > > //GDI Function pointers > > > PFND3DKMT_OPENADAPTERFROMHDC _pfnOpen_adapter_hdc; > > > -- > > > 2.5.5 > > > > > > _______________________________________________ > > > Spice-devel mailing list > > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > > _______________________________________________ > > Spice-devel mailing list > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel