Commit 16fa4bcec4df89f69171908e4f1d606721a49df0

Authored by perry.werneck@gmail.com
1 parent 73683f2e

Corrigindo tratamento do registry em windows

src/gtk/actions.c
@@ -284,6 +284,32 @@ static int id_from_array(const gchar *key, const gchar **array, GError **error) @@ -284,6 +284,32 @@ static int id_from_array(const gchar *key, const gchar **array, GError **error)
284 return -1; 284 return -1;
285 } 285 }
286 286
  287 +static int get_attribute_id(const gchar *name, const gchar *key, gchar **nm, const gchar **src, const gchar **names, const gchar **values, GError **error)
  288 +{
  289 + const gchar *attr = ui_get_attribute(key,names,values);
  290 + int id;
  291 +
  292 + if(!attr)
  293 + {
  294 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Attribute \"%s\" is invalid or undefined" ), key);
  295 + return -1;
  296 + }
  297 +
  298 + id = id_from_array(attr,src,error);
  299 + if(id >= 0)
  300 + {
  301 + if(*nm)
  302 + g_free(*nm);
  303 + *nm = g_strconcat(name,attr,NULL);
  304 + return id;
  305 + }
  306 +
  307 + if(!*error)
  308 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid %s attribute: \"%s\"" ), key, attr);
  309 +
  310 + return -1;
  311 +}
  312 +
287 static int setup_block_action(const gchar *name, const gchar *attr, GError **error) 313 static int setup_block_action(const gchar *name, const gchar *attr, GError **error)
288 { 314 {
289 int id = -1; 315 int id = -1;
@@ -392,30 +418,20 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -392,30 +418,20 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
392 } 418 }
393 else if(!g_strcasecmp(name,"paste")) 419 else if(!g_strcasecmp(name,"paste"))
394 { 420 {
  421 + static const GCallback cbk[] = { G_CALLBACK(paste_clipboard_action),
  422 + G_CALLBACK(paste_next_action),
  423 + G_CALLBACK(paste_file_action)
  424 + };
  425 + static const gchar * src[] = { "clipboard", "next", "file", NULL };
  426 +
  427 + callback = cbk;
395 action_type = ACTION_TYPE_TABLE; 428 action_type = ACTION_TYPE_TABLE;
396 - attr = ui_get_attribute("src",names,values);  
397 429
398 - if(!attr)  
399 - {  
400 - *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs src attribute" ), name); 430 + trace("%s",__FUNCTION__);
  431 + id = get_attribute_id(name,"src",&nm,src,names,values,error);
  432 + trace("%s",__FUNCTION__);
  433 + if(id < 0)
401 return NULL; 434 return NULL;
402 - }  
403 - else  
404 - {  
405 - static const GCallback cbk[] = { G_CALLBACK(paste_clipboard_action),  
406 - G_CALLBACK(paste_next_action),  
407 - G_CALLBACK(paste_file_action)  
408 - };  
409 - static const gchar * src[] = { "clipboard", "next", "file", NULL };  
410 -  
411 - id = id_from_array(attr,src,error);  
412 - if(id < 0)  
413 - return NULL;  
414 -  
415 - callback = cbk;  
416 - }  
417 -  
418 - nm = g_strconcat(name,attr, NULL);  
419 435
420 } 436 }
421 else if(!g_strcasecmp(name,"copy")) 437 else if(!g_strcasecmp(name,"copy"))
@@ -434,16 +450,9 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -434,16 +450,9 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
434 }; 450 };
435 callback = cbk; 451 callback = cbk;
436 action_type = ACTION_TYPE_TABLE; 452 action_type = ACTION_TYPE_TABLE;
437 - attr = ui_get_attribute("mode",names,values);  
438 -  
439 - id = id_from_array(attr,src,error); 453 + id = get_attribute_id(name,"mode",&nm,src,names,values,error);
440 if(id < 0) 454 if(id < 0)
441 - {  
442 - *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid mode attribute: \"%s\"" ), attr);  
443 return NULL; 455 return NULL;
444 - }  
445 -  
446 - nm = g_strconcat(name,attr,NULL);  
447 } 456 }
448 else if(!g_strcasecmp(name,"save")) 457 else if(!g_strcasecmp(name,"save"))
449 { 458 {
src/gtk/common/config.c
@@ -84,11 +84,11 @@ gchar * get_last_error_msg(void) @@ -84,11 +84,11 @@ gchar * get_last_error_msg(void)
84 #endif // WIN32 84 #endif // WIN32
85 85
86 #ifdef WIN_REGISTRY_ENABLED 86 #ifdef WIN_REGISTRY_ENABLED
87 - static BOOL registry_open_key(const gchar *group, const gchar *key, REGSAM samDesired, HKEY *hKey) 87 + static BOOL registry_open_key(const gchar *group, REGSAM samDesired, HKEY *hKey)
88 { 88 {
89 static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_USERS, HKEY_LOCAL_MACHINE }; 89 static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_USERS, HKEY_LOCAL_MACHINE };
90 int f; 90 int f;
91 - gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,group,key); 91 + gchar * path = g_strdup_printf("%s\\%s",registry_path,group);
92 92
93 for(f=0;f<G_N_ELEMENTS(predefined);f++) 93 for(f=0;f<G_N_ELEMENTS(predefined);f++)
94 { 94 {
@@ -99,7 +99,9 @@ gchar * get_last_error_msg(void) @@ -99,7 +99,9 @@ gchar * get_last_error_msg(void)
99 } 99 }
100 } 100 }
101 101
  102 + trace("Cant open \"%s\"",path);
102 g_free(path); 103 g_free(path);
  104 +
103 return FALSE; 105 return FALSE;
104 } 106 }
105 #else 107 #else
@@ -164,14 +166,14 @@ gchar * get_last_error_msg(void) @@ -164,14 +166,14 @@ gchar * get_last_error_msg(void)
164 166
165 HKEY key_handle; 167 HKEY key_handle;
166 168
167 - if(registry_open_key(group,key,KEY_READ,&key_handle)) 169 + if(registry_open_key(group,KEY_READ,&key_handle))
168 { 170 {
169 DWORD data; 171 DWORD data;
170 gboolean ret = def; 172 gboolean ret = def;
171 unsigned long datalen = sizeof(data); 173 unsigned long datalen = sizeof(data);
172 unsigned long datatype; 174 unsigned long datatype;
173 175
174 - if(RegQueryValueExA(key_handle,NULL,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS) 176 + if(RegQueryValueExA(key_handle,key,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS)
175 { 177 {
176 if(datatype == REG_DWORD) 178 if(datatype == REG_DWORD)
177 ret = data ? TRUE : FALSE; 179 ret = data ? TRUE : FALSE;
@@ -207,14 +209,14 @@ gchar * get_last_error_msg(void) @@ -207,14 +209,14 @@ gchar * get_last_error_msg(void)
207 209
208 HKEY key_handle; 210 HKEY key_handle;
209 211
210 - if(registry_open_key(group,key,KEY_READ,&key_handle)) 212 + if(registry_open_key(group,KEY_READ,&key_handle))
211 { 213 {
212 DWORD data; 214 DWORD data;
213 gint ret = def; 215 gint ret = def;
214 unsigned long datalen = sizeof(data); 216 unsigned long datalen = sizeof(data);
215 unsigned long datatype; 217 unsigned long datatype;
216 218
217 - if(RegQueryValueExA(key_handle,NULL,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS) 219 + if(RegQueryValueExA(key_handle,key,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS)
218 { 220 {
219 if(datatype == REG_DWORD) 221 if(datatype == REG_DWORD)
220 ret = (gint) data; 222 ret = (gint) data;
@@ -255,14 +257,16 @@ gchar * get_last_error_msg(void) @@ -255,14 +257,16 @@ gchar * get_last_error_msg(void)
255 unsigned long datalen = sizeof(data); 257 unsigned long datalen = sizeof(data);
256 gchar *ret = NULL; 258 gchar *ret = NULL;
257 259
258 - if(!registry_open_key(group,key,KEY_READ,&key_handle)) 260 + if(!registry_open_key(group,KEY_READ,&key_handle))
259 return g_strdup(def); 261 return g_strdup(def);
260 262
261 - if(RegQueryValueExA(key_handle,NULL,NULL,&datatype,data,&datalen) == ERROR_SUCCESS) 263 + if(RegQueryValueExA(key_handle,key,NULL,&datatype,data,&datalen) == ERROR_SUCCESS)
262 { 264 {
263 ret = (char *) malloc(datalen+1); 265 ret = (char *) malloc(datalen+1);
  266 +
264 memcpy(ret,data,datalen); 267 memcpy(ret,data,datalen);
265 ret[datalen+1] = 0; 268 ret[datalen+1] = 0;
  269 + trace("%s\\%s=\"%s\"",group,key,ret);
266 } 270 }
267 else if(def) 271 else if(def)
268 { 272 {
@@ -353,13 +357,13 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val) @@ -353,13 +357,13 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val)
353 357
354 HKEY hKey; 358 HKEY hKey;
355 DWORD disp; 359 DWORD disp;
356 - gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,group,key); 360 + gchar * path = g_strdup_printf("%s\\%s",registry_path,group);
357 361
358 trace("Creating key %s",path); 362 trace("Creating key %s",path);
359 if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) 363 if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS)
360 { 364 {
361 DWORD value = val ? 1 : 0; 365 DWORD value = val ? 1 : 0;
362 - LONG rc = RegSetValueEx(hKey, NULL, 0, REG_DWORD,(const BYTE *) &value,sizeof(value)); 366 + LONG rc = RegSetValueEx(hKey, key, 0, REG_DWORD,(const BYTE *) &value,sizeof(value));
363 367
364 SetLastError(rc); 368 SetLastError(rc);
365 369
src/gtk/uiparser/parsefile.c
@@ -115,7 +115,6 @@ @@ -115,7 +115,6 @@
115 const gchar * name = NULL; 115 const gchar * name = NULL;
116 gchar * key; 116 gchar * key;
117 117
118 -trace("%s ----",__FUNCTION__);  
119 if(action) 118 if(action)
120 name = gtk_action_get_name(action); 119 name = gtk_action_get_name(action);
121 120