[Spice-devel] [PATCH spice 1/2] client: Interpret the title control message as utf8 instead of unicode16

Alon Levy alevy at redhat.com
Thu Oct 21 05:17:34 PDT 2010


Looks like the same patch I tested, so ACK.

On Thu, Oct 21, 2010 at 01:22:30PM +0200, Hans de Goede wrote:
> The activex browser plugin is sending unicode16 text, where as the
> xpi one is sending utf8 text. After discussing this on irc we've decided
> that utf8 is what we want to use. So the client (this patch), and the
> activex will be changed to expect resp. send utf8 text as the title.
> ---
>  client/application.cpp        |    4 ++--
>  client/application.h          |    4 ++--
>  client/controller.cpp         |    8 ++------
>  client/controller.h           |    2 +-
>  client/red_window.h           |    2 +-
>  client/screen.cpp             |    6 +++---
>  client/screen.h               |    6 +++---
>  client/windows/red_window.cpp |    2 +-
>  client/x11/red_window.cpp     |    8 ++++----
>  9 files changed, 19 insertions(+), 23 deletions(-)
> 
> diff --git a/client/application.cpp b/client/application.cpp
> index 212b20e..d5b24a7 100644
> --- a/client/application.cpp
> +++ b/client/application.cpp
> @@ -355,7 +355,7 @@ Application::Application()
>      , _key_handler (&default_key_handler)
>      , _mouse_handler (&default_mouse_handler)
>      , _monitors (NULL)
> -    , _title (L"SPICEc:%d")
> +    , _title ("SPICEc:%d")
>      , _sys_key_intercept_mode (false)
>  	, _enable_controller (false)
>  #ifdef USE_GUI
> @@ -1603,7 +1603,7 @@ uint32_t Application::get_mouse_mode()
>      return _client.get_mouse_mode();
>  }
>  
> -void Application::set_title(const std::wstring& title)
> +void Application::set_title(const std::string& title)
>  {
>      _title = title;
>  
> diff --git a/client/application.h b/client/application.h
> index c01e08b..19c68a5 100644
> --- a/client/application.h
> +++ b/client/application.h
> @@ -218,7 +218,7 @@ public:
>      void exit_full_screen();
>      bool toggle_full_screen();
>      void minimize();
> -    void set_title(const std::wstring& title);
> +    void set_title(const std::string& title);
>      void hide();
>      void show();
>      void external_show();
> @@ -367,7 +367,7 @@ private:
>      KeyHandlersStack _key_handlers;
>      MouseHandler* _mouse_handler;
>      const MonitorsList* _monitors;
> -    std::wstring _title;
> +    std::string _title;
>      bool _sys_key_intercept_mode;
>      StickyInfo _sticky_info;
>      std::vector<int> _canvas_types;
> diff --git a/client/controller.cpp b/client/controller.cpp
> index 032afae..6d1272c 100644
> --- a/client/controller.cpp
> +++ b/client/controller.cpp
> @@ -308,12 +308,8 @@ bool ControllerConnection::handle_message(ControllerMsg *hdr)
>          _handler->set_auto_display_res(!!(value & CONTROLLER_AUTO_DISPLAY_RES));
>          break;
>      case CONTROLLER_SET_TITLE: {
> -        std::wstring str;
> -#ifdef WIN32
> -        wstring_printf(str, L"%s", data);
> -#else
> -        wstring_printf(str, L"%S", data);
> -#endif
> +        std::string str;
> +        string_printf(str, "%s", data);
>          _handler->set_title(str);
>          break;
>      }
> diff --git a/client/controller.h b/client/controller.h
> index 89b2c23..924f351 100644
> --- a/client/controller.h
> +++ b/client/controller.h
> @@ -33,7 +33,7 @@ public:
>  
>      virtual bool connect(const std::string& host, int port, int sport,
>                           const std::string& password) = 0;
> -    virtual void set_title(const std::wstring& title) = 0;
> +    virtual void set_title(const std::string& title) = 0;
>      virtual void set_auto_display_res(bool auto_display_res) = 0;
>      virtual void show_me(bool full_screen) = 0;
>      virtual void hide_me() = 0;
> diff --git a/client/red_window.h b/client/red_window.h
> index 97f3b79..632564d 100644
> --- a/client/red_window.h
> +++ b/client/red_window.h
> @@ -48,7 +48,7 @@ public:
>      void hide();
>      void minimize();
>      void activate();
> -    void set_title(std::wstring& title);
> +    void set_title(std::string& title);
>      void set_icon(Icon *icon);
>      virtual RedDrawable::Format get_format();
>  
> diff --git a/client/screen.cpp b/client/screen.cpp
> index 7c4e1e3..575ab5d 100644
> --- a/client/screen.cpp
> +++ b/client/screen.cpp
> @@ -71,7 +71,7 @@ void UpdateTimer::response(AbstractProcessLoop& events_loop)
>      _screen->periodic_update();
>  }
>  
> -RedScreen::RedScreen(Application& owner, int id, const std::wstring& name, int width, int height)
> +RedScreen::RedScreen(Application& owner, int id, const std::string& name, int width, int height)
>      : _owner (owner)
>      , _id (id)
>      , _refs (1)
> @@ -216,10 +216,10 @@ void RedScreen::unlock_size()
>      _owner.on_screen_unlocked(*this);
>  }
>  
> -void RedScreen::set_name(const std::wstring& name)
> +void RedScreen::set_name(const std::string& name)
>  {
>      if (!name.empty()) {
> -        wstring_printf(_name, name.c_str(), _id);
> +        string_printf(_name, name.c_str(), _id);
>      }
>      _window.set_title(_name);
>  }
> diff --git a/client/screen.h b/client/screen.h
> index dfef989..d81ebf8 100644
> --- a/client/screen.h
> +++ b/client/screen.h
> @@ -54,7 +54,7 @@ private:
>  
>  class RedScreen: public RedWindow::Listener {
>  public:
> -    RedScreen(Application& owner, int id, const std::wstring& name, int width, int height);
> +    RedScreen(Application& owner, int id, const std::string& name, int width, int height);
>  
>      RedScreen* ref();
>      void unref();
> @@ -63,7 +63,7 @@ public:
>      void detach_layer(ScreenLayer& layer);
>      void on_layer_changed(ScreenLayer& layer);
>      void resize(int width, int height);
> -    void set_name(const std::wstring& name);
> +    void set_name(const std::string& name);
>      uint64_t invalidate(const SpiceRect& rect, bool urgent);
>      void invalidate(const QRegion &region);
>      void capture_mouse();
> @@ -163,7 +163,7 @@ private:
>      Application& _owner;
>      int _id;
>      AtomicCount _refs;
> -    std::wstring _name;
> +    std::string _name;
>      RedWindow _window;
>      std::vector<ScreenLayer*> _layes;
>      QRegion _dirty_region;
> diff --git a/client/windows/red_window.cpp b/client/windows/red_window.cpp
> index bab2d97..0413945 100644
> --- a/client/windows/red_window.cpp
> +++ b/client/windows/red_window.cpp
> @@ -446,7 +446,7 @@ RedWindow::~RedWindow()
>      }
>  }
>  
> -void RedWindow::set_title(std::wstring& title)
> +void RedWindow::set_title(std::string& title)
>  {
>      SetWindowText(_win, title.c_str());
>  }
> diff --git a/client/x11/red_window.cpp b/client/x11/red_window.cpp
> index 7cdf684..416f6c7 100644
> --- a/client/x11/red_window.cpp
> +++ b/client/x11/red_window.cpp
> @@ -1331,16 +1331,16 @@ RedWindow::~RedWindow()
>      }
>  }
>  
> -void RedWindow::set_title(std::wstring& title)
> +void RedWindow::set_title(std::string& title)
>  {
>      XTextProperty text_prop;
> -    wchar_t *name = const_cast<wchar_t *>(title.c_str());
> +    char *name = const_cast<char *>(title.c_str());
>      int r;
>      if (_win) {
>          XLockDisplay(x_display);
> -        r = XwcTextListToTextProperty(x_display, &name, 1, XStringStyle, &text_prop);
> +        r = Xutf8TextListToTextProperty(x_display, &name, 1, XUTF8StringStyle, &text_prop);
>          XUnlockDisplay(x_display);
> -        if (r >= 0) {
> +        if (r == Success) {
>              XSetWMName(x_display, _win, &text_prop);
>              XFree(text_prop.value);
>          } else {
> -- 
> 1.7.3.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list