summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2010-10-21 17:33:15 +0200
committerHans de Goede <hdegoede@redhat.com>2010-10-25 11:36:35 +0200
commita1cef5b81a60c439c87637507f818a49fe96c60e (patch)
tree8eb6386b93e169eaae304c2a7a62f8e232c0c6e1
parent18e6edb93adf45adeccf994f5561b7dc92012cf8 (diff)
downloadspice-a1cef5b81a60c439c87637507f818a49fe96c60e.tar.gz
spice-a1cef5b81a60c439c87637507f818a49fe96c60e.tar.xz
spice-a1cef5b81a60c439c87637507f818a49fe96c60e.zip
controller: Make menu text utf-8
We are making all text send over the controller socket utf-8, rather then having somethings as 8 bit (hostname) and others (title, menu) unicode16, this patch completes this change by converting the menu handling.
-rw-r--r--client/controller.cpp39
-rw-r--r--client/controller.h2
2 files changed, 19 insertions, 22 deletions
diff --git a/client/controller.cpp b/client/controller.cpp
index 6d1272c9..eabbcd45 100644
--- a/client/controller.cpp
+++ b/client/controller.cpp
@@ -326,7 +326,7 @@ bool ControllerConnection::handle_message(ControllerMsg *hdr)
_handler->hide_me();
break;
case CONTROLLER_CREATE_MENU:
- return create_menu((wchar_t*)data);
+ return create_menu((char*)data);
case CONTROLLER_DELETE_MENU:
_handler->delete_menu();
break;
@@ -339,18 +339,18 @@ bool ControllerConnection::handle_message(ControllerMsg *hdr)
}
#ifdef WIN32
-#define next_tok(str, delim, state) wcstok(str, delim)
+#define next_tok(str, delim, state) strtok(str, delim)
#else
-#define next_tok(str, delim, state) wcstok(str, delim, state)
+#define next_tok(str, delim, state) strtok_r(str, delim, state)
#endif
-bool ControllerConnection::create_menu(wchar_t* resource)
+bool ControllerConnection::create_menu(char* resource)
{
bool ret = true;
- wchar_t* item_state = 0;
- wchar_t* item_dup;
- wchar_t* param;
- std::string text;
+ char* item_state = 0;
+ char* item_dup;
+ const char* param;
+ const char* text;
int parent_id;
int flags;
int state;
@@ -359,30 +359,27 @@ bool ControllerConnection::create_menu(wchar_t* resource)
ASSERT(_handler);
AutoRef<Menu> app_menu(_handler->get_app_menu());
AutoRef<Menu> menu(new Menu((*app_menu)->get_target(), ""));
- wchar_t* item = next_tok(resource, CONTROLLER_MENU_ITEM_DELIMITER, &item_state);
+ char* item = next_tok(resource, CONTROLLER_MENU_ITEM_DELIMITER, &item_state);
while (item != NULL) {
- item_dup = wcsdup(item);
+ item_dup = strdup(item);
ret = ret && (param = next_tok(item_dup, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) &&
- swscanf(param, L"%d", &parent_id);
+ sscanf(param, "%d", &parent_id);
ret = ret && (param = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) &&
- swscanf(param, L"%d", &id);
- ret = ret && (param = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state));
- if (ret) {
- string_printf(text, "%S", param);
- }
+ sscanf(param, "%d", &id);
+ ret = ret && (text = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state));
ret = ret && (param = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) &&
- swscanf(param, L"%d", &flags);
+ sscanf(param, "%d", &flags);
free(item_dup);
if (!ret) {
- DBG(0, "item parsing failed %S", item);
+ DBG(0, "item parsing failed %s", item);
break;
}
- DBG(0, "parent_id=%d, id=%d, text=%s, flags=%d", parent_id, id, text.c_str(), flags);
+ DBG(0, "parent_id=%d, id=%d, text=%s, flags=%d", parent_id, id, text, flags);
AutoRef<Menu> sub_menu((*menu)->find_sub(parent_id));
if (!(ret = !!*sub_menu)) {
- DBG(0, "submenu not found %S", item);
+ DBG(0, "submenu not found %s", item);
break;
}
@@ -406,7 +403,7 @@ bool ControllerConnection::create_menu(wchar_t* resource)
}
(*sub_menu)->add_command(text, id, state);
}
- item = next_tok(item + wcslen(item) + 1, CONTROLLER_MENU_ITEM_DELIMITER, &item_state);
+ item = next_tok(item + strlen(item) + 1, CONTROLLER_MENU_ITEM_DELIMITER, &item_state);
}
if (ret) {
_handler->set_menu(*menu);
diff --git a/client/controller.h b/client/controller.h
index 924f351b..bf927073 100644
--- a/client/controller.h
+++ b/client/controller.h
@@ -90,7 +90,7 @@ private:
bool read_msgs();
bool handle_init(ControllerInit *init);
bool handle_message(ControllerMsg *hdr);
- bool create_menu(wchar_t* resource);
+ bool create_menu(char* resource);
bool set_multi_val(uint32_t op, char* multi_val);
private: