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 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 313 static int setup_block_action(const gchar *name, const gchar *attr, GError **error)
288 314 {
289 315 int id = -1;
... ... @@ -392,30 +418,20 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
392 418 }
393 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 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 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 437 else if(!g_strcasecmp(name,"copy"))
... ... @@ -434,16 +450,9 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
434 450 };
435 451 callback = cbk;
436 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 454 if(id < 0)
441   - {
442   - *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid mode attribute: \"%s\"" ), attr);
443 455 return NULL;
444   - }
445   -
446   - nm = g_strconcat(name,attr,NULL);
447 456 }
448 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 84 #endif // WIN32
85 85  
86 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 89 static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_USERS, HKEY_LOCAL_MACHINE };
90 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 93 for(f=0;f<G_N_ELEMENTS(predefined);f++)
94 94 {
... ... @@ -99,7 +99,9 @@ gchar * get_last_error_msg(void)
99 99 }
100 100 }
101 101  
  102 + trace("Cant open \"%s\"",path);
102 103 g_free(path);
  104 +
103 105 return FALSE;
104 106 }
105 107 #else
... ... @@ -164,14 +166,14 @@ gchar * get_last_error_msg(void)
164 166  
165 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 171 DWORD data;
170 172 gboolean ret = def;
171 173 unsigned long datalen = sizeof(data);
172 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 178 if(datatype == REG_DWORD)
177 179 ret = data ? TRUE : FALSE;
... ... @@ -207,14 +209,14 @@ gchar * get_last_error_msg(void)
207 209  
208 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 214 DWORD data;
213 215 gint ret = def;
214 216 unsigned long datalen = sizeof(data);
215 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 221 if(datatype == REG_DWORD)
220 222 ret = (gint) data;
... ... @@ -255,14 +257,16 @@ gchar * get_last_error_msg(void)
255 257 unsigned long datalen = sizeof(data);
256 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 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 265 ret = (char *) malloc(datalen+1);
  266 +
264 267 memcpy(ret,data,datalen);
265 268 ret[datalen+1] = 0;
  269 + trace("%s\\%s=\"%s\"",group,key,ret);
266 270 }
267 271 else if(def)
268 272 {
... ... @@ -353,13 +357,13 @@ void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val)
353 357  
354 358 HKEY hKey;
355 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 362 trace("Creating key %s",path);
359 363 if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS)
360 364 {
361 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 368 SetLastError(rc);
365 369  
... ...
src/gtk/uiparser/parsefile.c
... ... @@ -115,7 +115,6 @@
115 115 const gchar * name = NULL;
116 116 gchar * key;
117 117  
118   -trace("%s ----",__FUNCTION__);
119 118 if(action)
120 119 name = gtk_action_get_name(action);
121 120  
... ...