mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 22:48:19 +00:00
client: Interpret the title control message as utf8 instead of unicode16
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.
This commit is contained in:
parent
79fffbf95d
commit
fa2e125ec4
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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 ®ion);
|
||||
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;
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user