> On 4 Aug 2016, at 17:02 PM, Victor Toso <lists@xxxxxxxxxxxxxx> wrote: > > Hi, > > On Thu, Aug 04, 2016 at 05:00:33PM +0300, Dmitry Fleytman wrote: >> >>> On 4 Aug 2016, at 16:44 PM, Victor Toso <lists@xxxxxxxxxxxxxx> wrote: >>> >>> 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 >> >> I mean, is there any tool/command line switch that we can use to check this case? > > Yes! spicy has a `toggle mouse mode` in the options (shift + F7) Cool, I did not know this. Is there pre-compiled spicy binary that we can use somewhere? > >> >>> >>>> >>>> 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