diff --git a/src/buttons.c b/src/buttons.c index d3fbb729..801dad1f 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -762,6 +762,15 @@ const T_Lookup Lookup_MouseSpeed[] = { {NULL,-1}, }; +const T_Lookup Lookup_SwapButtons[] = { + {"None",0}, + {"Shift",MOD_SHIFT}, + {"Control",MOD_CTRL}, + {"Alt",MOD_ALT}, + {"Meta",MOD_META}, + {NULL,-1}, +}; + typedef struct { const char* Label; byte Type; // 0: label, 1+: setting (size in bytes) @@ -920,7 +929,6 @@ void Button_Settings(void) T_Setting setting[SETTING_PER_PAGE*SETTING_PAGES] = { {" --- GUI ---",0,NULL,0,0,0,NULL}, - {"",0,NULL,0,0,0,NULL}, {"Opening message:",1,&(selected_config.Opening_message),0,1,0,Lookup_YesNo}, {"Menu ratio adapt:",1,&(selected_config.Ratio),0,1,0,Lookup_MenuRatio}, {"Draw limits:",1,&(selected_config.Display_image_limits),0,1,0,Lookup_YesNo}, @@ -930,9 +938,9 @@ void Button_Settings(void) {"Grid XOR color:",1,&(selected_config.Grid_XOR_color),0,255,3,NULL}, {"Sync views:",1,&(selected_config.Sync_views),0,1,0,Lookup_YesNo}, {"",0,NULL,0,0,0,NULL}, + {"",0,NULL,0,0,0,NULL}, {" --- Input ---",0,NULL,0,0,0,NULL}, - {"",0,NULL,0,0,0,NULL}, {"Scrollbar speed",0,NULL,0,0,0,NULL}, {" on left click:",1,&(selected_config.Delay_left_click_on_slider),1,255,4,NULL}, {" on right click:",1,&(selected_config.Delay_right_click_on_slider),1,255,4,NULL}, @@ -942,9 +950,9 @@ void Button_Settings(void) {"Mouse speed (fullscreen)",0,NULL,0,0,0,NULL}, {" horizontally:",1,&(selected_config.Mouse_sensitivity_index_x),1,4,0,Lookup_MouseSpeed}, {" vertically:",1,&(selected_config.Mouse_sensitivity_index_y),1,4,0,Lookup_MouseSpeed}, + {"Key to swap buttons:",2,&(selected_config.Swap_buttons),0,0,0,Lookup_SwapButtons}, {" --- Editing ---",0,NULL,0,0,0,NULL}, - {"",0,NULL,0,0,0,NULL}, {"Adjust brush pick:",1,&(selected_config.Adjust_brush_pick),0,1,0,Lookup_YesNo}, {"Undo pages:",1,&(selected_config.Max_undo_pages),1,99,5,NULL}, {"Vertices per polygon:",4,&(selected_config.Nb_max_vertices_per_polygon),2,16384,5,NULL}, @@ -954,9 +962,9 @@ void Button_Settings(void) {"Auto count colors:",1,&(selected_config.Auto_nb_used),0,1,0,Lookup_YesNo}, {"Right click colorpick:",1,&(selected_config.Right_click_colorpick),0,1,0,Lookup_YesNo}, {"",0,NULL,0,0,0,NULL}, + {"",0,NULL,0,0,0,NULL}, {" --- File selector ---",0,NULL,0,0,0,NULL}, - {"",0,NULL,0,0,0,NULL}, {"Show in fileselector",0,NULL,0,0,0,NULL}, {" Hidden files:",4,&(selected_config.Show_hidden_files),0,1,0,Lookup_YesNo}, {" Hidden dirs:",4,&(selected_config.Show_hidden_directories),0,1,0,Lookup_YesNo}, @@ -966,9 +974,9 @@ void Button_Settings(void) {"Auto set resolution:",1,&(selected_config.Auto_set_res), 0,1,0,Lookup_YesNo}, {" According to:",1,&(selected_config.Set_resolution_according_to), 1,2,0,Lookup_AutoRes}, {"Backup:",1,&(selected_config.Backup), 0,1,0,Lookup_YesNo}, + {"",0,NULL,0,0,0,NULL}, {" --- Format options ---",0,NULL,0,0,0,NULL}, - {"",0,NULL,0,0,0,NULL}, {"Screen size in GIF:",1,&(selected_config.Screen_size_in_GIF),0,1,0,Lookup_YesNo}, {"Clear palette:",1,&(selected_config.Clear_palette),0,1,0,Lookup_YesNo}, {"",0,NULL,0,0,0,NULL}, @@ -978,6 +986,7 @@ void Button_Settings(void) {"",0,NULL,0,0,0,NULL}, {"",0,NULL,0,0,0,NULL}, {"",0,NULL,0,0,0,NULL}, + {"",0,NULL,0,0,0,NULL}, }; diff --git a/src/helpfile.h b/src/helpfile.h index 11d246a8..7632c039 100644 --- a/src/helpfile.h +++ b/src/helpfile.h @@ -2389,6 +2389,14 @@ static const T_Help_table helptable_settings_details[] = HELP_TEXT ("GrafX2 to recognize them as a combo.") HELP_TEXT ("") HELP_TEXT ("") + HELP_BOLD (" Swap buttons") + HELP_TEXT ("This setting determines which key inverts") + HELP_TEXT ("the mouse buttons when it's held : A left") + HELP_TEXT ("click is then interpreted as a right-click.") + HELP_TEXT ("It's especially useful for one-button") + HELP_TEXT ("controllers, such as touchscreens and") + HELP_TEXT ("tablets.") + HELP_TEXT ("") HELP_TITLE("EDITING") HELP_TEXT ("") HELP_TEXT ("") @@ -2432,7 +2440,7 @@ static const T_Help_table helptable_settings_details[] = HELP_TEXT ("This mode prevents you from painting with") HELP_TEXT ("Background color.") HELP_TEXT ("This option is ignored when the Shade,") - HELP_TEXT ("Quick-shade, or Tiling mode is used.") + HELP_TEXT ("Quick-shade, or Tiling mode is used.") }; static const T_Help_table helptable_clear[] = diff --git a/src/input.c b/src/input.c index 38f91172..a6e33433 100644 --- a/src/input.c +++ b/src/input.c @@ -83,6 +83,7 @@ int Mouse_moved; ///< Boolean, Set to true if any cursor movement occurs. word Input_new_mouse_X; word Input_new_mouse_Y; byte Input_new_mouse_K; +byte Button_inverter=0; // State of the key that swaps mouse buttons. byte Mouse_mode = 0; ///< Mouse mode = 0:normal, 1:emulated with custom sensitivity. short Mouse_virtual_x_position; @@ -338,11 +339,19 @@ int Handle_mouse_click(SDL_MouseButtonEvent event) switch(event.button) { case SDL_BUTTON_LEFT: - Input_new_mouse_K |= 1; + if (Button_inverter) + Input_new_mouse_K |= 2; + else + Input_new_mouse_K |= 1; + break; break; case SDL_BUTTON_RIGHT: - Input_new_mouse_K |= 2; + if (Button_inverter) + Input_new_mouse_K |= 1; + else + Input_new_mouse_K |= 2; + break; break; case SDL_BUTTON_MIDDLE: @@ -368,11 +377,17 @@ int Handle_mouse_release(SDL_MouseButtonEvent event) switch(event.button) { case SDL_BUTTON_LEFT: - Input_new_mouse_K &= ~1; + if (Button_inverter) + Input_new_mouse_K &= ~2; + else + Input_new_mouse_K &= ~1; break; case SDL_BUTTON_RIGHT: - Input_new_mouse_K &= ~2; + if (Button_inverter) + Input_new_mouse_K &= ~1; + else + Input_new_mouse_K &= ~2; break; } @@ -384,8 +399,45 @@ int Handle_mouse_release(SDL_MouseButtonEvent event) int Handle_key_press(SDL_KeyboardEvent event) { //Appui sur une touche du clavier + int modifier; + Key = Keysym_to_keycode(event.keysym); Key_ANSI = Keysym_to_ANSI(event.keysym); + switch(event.keysym.sym) + { + case SDLK_RSHIFT: + case SDLK_LSHIFT: + modifier=MOD_SHIFT; + break; + + case SDLK_RCTRL: + case SDLK_LCTRL: + modifier=MOD_CTRL; + break; + + case SDLK_RALT: + case SDLK_LALT: + case SDLK_MODE: + modifier=MOD_ALT; + break; + + case SDLK_RMETA: + case SDLK_LMETA: + modifier=MOD_META; + break; + + default: + modifier=0; + } + if (Config.Swap_buttons && modifier == Config.Swap_buttons && Button_inverter==0) + { + Button_inverter=1; + if (Input_new_mouse_K) + { + Input_new_mouse_K ^= 3; // Flip bits 0 and 1 + return Move_cursor_with_constraints(); + } + } if(Is_shortcut(Key,SPECIAL_MOUSE_UP)) { @@ -433,6 +485,15 @@ int Release_control(int key_code, int modifier) Snap_axis = 0; need_feedback = 1; } + if (Config.Swap_buttons && modifier == Config.Swap_buttons && Button_inverter==1) + { + Button_inverter=0; + if (Input_new_mouse_K) + { + Input_new_mouse_K ^= 3; // Flip bits 0 and 1 + return Move_cursor_with_constraints(); + } + } if((key_code && key_code == (Config_Key[SPECIAL_MOUSE_UP][0]&0x0FFF)) || (Config_Key[SPECIAL_MOUSE_UP][0]&modifier) || (key_code && key_code == (Config_Key[SPECIAL_MOUSE_UP][1]&0x0FFF)) || (Config_Key[SPECIAL_MOUSE_UP][1]&modifier)) @@ -538,12 +599,12 @@ int Handle_joystick_press(SDL_JoyButtonEvent event) } if (event.button == Joybutton_left_click) { - Input_new_mouse_K=1; + Input_new_mouse_K = Button_inverter ? 2 : 1; return Move_cursor_with_constraints(); } if (event.button == Joybutton_right_click) { - Input_new_mouse_K=2; + Input_new_mouse_K = Button_inverter ? 1 : 2; return Move_cursor_with_constraints(); } switch(event.button) @@ -768,6 +829,7 @@ int Get_input(int sleep_time) Mouse_moved=0; Input_new_mouse_X = Mouse_X; Input_new_mouse_Y = Mouse_Y; + Input_new_mouse_K = Mouse_K; // Not using SDL_PollEvent() because every call polls the input // device. In some cases such as high-sensitivity mouse or cheap diff --git a/src/readini.c b/src/readini.c index 6d1997df..c280574d 100644 --- a/src/readini.c +++ b/src/readini.c @@ -916,6 +916,29 @@ int Load_INI(T_Config * conf) conf->Sync_views=(values[0]!=0); } + conf->Swap_buttons=0; + // Optional, key for swap buttons (>=2.3) + if (!Load_INI_get_values (file,buffer,"Swap_buttons",1,values)) + { + switch(values[0]) + { + case 1: + conf->Swap_buttons=MOD_SHIFT; + break; + case 2: + conf->Swap_buttons=MOD_CTRL; + break; + case 3: + conf->Swap_buttons=MOD_ALT; + break; + case 4: + conf->Swap_buttons=MOD_META; + break; + } + } + + + // Insert new values here fclose(file); diff --git a/src/saveini.c b/src/saveini.c index a3d9eb54..1d1ae41d 100644 --- a/src/saveini.c +++ b/src/saveini.c @@ -393,8 +393,8 @@ void Save_INI_flush(FILE * old_file,FILE * new_file,char * buffer) int Save_INI(T_Config * conf) { - FILE * Ancien_fichier; - FILE * Nouveau_fichier; + FILE * old_file; + FILE * new_file; char * buffer; int values[3]; char filename[MAX_PATH_CHARACTERS]; @@ -426,236 +426,236 @@ int Save_INI(T_Config * conf) // On récupère un fichier INI "propre" à partir de gfx2def.ini strcpy(ref_ini_file,Data_directory); strcat(ref_ini_file,"gfx2def.ini"); - Ancien_fichier=fopen(ref_ini_file,"rb"); - if (Ancien_fichier==0) + old_file=fopen(ref_ini_file,"rb"); + if (old_file==0) { - fclose(Ancien_fichier); + fclose(old_file); free(buffer); return ERROR_INI_MISSING; } - Nouveau_fichier=fopen(filename,"wb"); - if (Nouveau_fichier==0) + new_file=fopen(filename,"wb"); + if (new_file==0) { free(buffer); return ERROR_SAVING_INI; } - if ((return_code=Save_INI_reach_group(Ancien_fichier,Nouveau_fichier,buffer,"[MOUSE]"))) + if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[MOUSE]"))) goto Erreur_Retour; values[0]=conf->Mouse_sensitivity_index_x; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"X_sensitivity",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"X_sensitivity",1,values,0))) goto Erreur_Retour; values[0]=conf->Mouse_sensitivity_index_y; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Y_sensitivity",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Y_sensitivity",1,values,0))) goto Erreur_Retour; values[0]=0; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"X_correction_factor",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"X_correction_factor",1,values,0))) goto Erreur_Retour; values[0]=0; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Y_correction_factor",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Y_correction_factor",1,values,0))) goto Erreur_Retour; values[0]=(conf->Cursor)+1; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Cursor_aspect",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Cursor_aspect",1,values,0))) goto Erreur_Retour; - if ((return_code=Save_INI_reach_group(Ancien_fichier,Nouveau_fichier,buffer,"[MENU]"))) + if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[MENU]"))) goto Erreur_Retour; values[0]=conf->Fav_menu_colors[2].R>>2; values[1]=conf->Fav_menu_colors[2].G>>2; values[2]=conf->Fav_menu_colors[2].B>>2; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Light_color",3,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Light_color",3,values,0))) goto Erreur_Retour; values[0]=conf->Fav_menu_colors[1].R>>2; values[1]=conf->Fav_menu_colors[1].G>>2; values[2]=conf->Fav_menu_colors[1].B>>2; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Dark_color",3,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Dark_color",3,values,0))) goto Erreur_Retour; values[0]=conf->Ratio; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Menu_ratio",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Menu_ratio",1,values,0))) goto Erreur_Retour; - if ((return_code=Save_INI_reach_group(Ancien_fichier,Nouveau_fichier,buffer,"[FILE_SELECTOR]"))) + if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[FILE_SELECTOR]"))) goto Erreur_Retour; values[0]=conf->Show_hidden_files?1:0; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Show_hidden_files",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Show_hidden_files",1,values,1))) goto Erreur_Retour; values[0]=conf->Show_hidden_directories?1:0; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Show_hidden_directories",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Show_hidden_directories",1,values,1))) goto Erreur_Retour; /* values[0]=conf->Show_system_directories?1:0; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Show_system_directories",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Show_system_directories",1,values,1))) goto Erreur_Retour; */ values[0]=conf->Timer_delay; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Preview_delay",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Preview_delay",1,values,0))) goto Erreur_Retour; values[0]=conf->Maximize_preview; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Maximize_preview",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Maximize_preview",1,values,1))) goto Erreur_Retour; values[0]=conf->Find_file_fast; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Find_file_fast",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Find_file_fast",1,values,0))) goto Erreur_Retour; - if ((return_code=Save_INI_reach_group(Ancien_fichier,Nouveau_fichier,buffer,"[LOADING]"))) + if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[LOADING]"))) goto Erreur_Retour; values[0]=conf->Auto_set_res; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Auto_set_resolution",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Auto_set_resolution",1,values,1))) goto Erreur_Retour; values[0]=conf->Set_resolution_according_to; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Set_resolution_according_to",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Set_resolution_according_to",1,values,0))) goto Erreur_Retour; values[0]=conf->Clear_palette; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Clear_palette",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Clear_palette",1,values,1))) goto Erreur_Retour; - if ((return_code=Save_INI_reach_group(Ancien_fichier,Nouveau_fichier,buffer,"[MISCELLANEOUS]"))) + if ((return_code=Save_INI_reach_group(old_file,new_file,buffer,"[MISCELLANEOUS]"))) goto Erreur_Retour; values[0]=conf->Display_image_limits; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Draw_limits",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Draw_limits",1,values,1))) goto Erreur_Retour; values[0]=conf->Adjust_brush_pick; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Adjust_brush_pick",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Adjust_brush_pick",1,values,1))) goto Erreur_Retour; values[0]=2-conf->Coords_rel; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Coordinates",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Coordinates",1,values,0))) goto Erreur_Retour; values[0]=conf->Backup; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Backup",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Backup",1,values,1))) goto Erreur_Retour; values[0]=conf->Max_undo_pages; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Undo_pages",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Undo_pages",1,values,0))) goto Erreur_Retour; values[0]=conf->Delay_left_click_on_slider; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Gauges_scrolling_speed_Left",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Gauges_scrolling_speed_Left",1,values,0))) goto Erreur_Retour; values[0]=conf->Delay_right_click_on_slider; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Gauges_scrolling_speed_Right",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Gauges_scrolling_speed_Right",1,values,0))) goto Erreur_Retour; values[0]=conf->Auto_save; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Auto_save",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Auto_save",1,values,1))) goto Erreur_Retour; values[0]=conf->Nb_max_vertices_per_polygon; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Vertices_per_polygon",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Vertices_per_polygon",1,values,0))) goto Erreur_Retour; values[0]=conf->Fast_zoom; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Fast_zoom",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Fast_zoom",1,values,1))) goto Erreur_Retour; values[0]=conf->Separate_colors; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Separate_colors",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Separate_colors",1,values,1))) goto Erreur_Retour; values[0]=conf->FX_Feedback; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"FX_feedback",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"FX_feedback",1,values,1))) goto Erreur_Retour; values[0]=conf->Safety_colors; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Safety_colors",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Safety_colors",1,values,1))) goto Erreur_Retour; values[0]=conf->Opening_message; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Opening_message",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Opening_message",1,values,1))) goto Erreur_Retour; values[0]=conf->Clear_with_stencil; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Clear_with_stencil",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Clear_with_stencil",1,values,1))) goto Erreur_Retour; values[0]=conf->Auto_discontinuous; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Auto_discontinuous",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Auto_discontinuous",1,values,1))) goto Erreur_Retour; values[0]=conf->Screen_size_in_GIF; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Save_screen_size_in_GIF",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Save_screen_size_in_GIF",1,values,1))) goto Erreur_Retour; values[0]=conf->Auto_nb_used; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Auto_nb_colors_used",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Auto_nb_colors_used",1,values,1))) goto Erreur_Retour; - if ((return_code=Save_INI_set_strings (Ancien_fichier,Nouveau_fichier,buffer,"Default_video_mode",Mode_label(conf->Default_resolution)))) + if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Default_video_mode",Mode_label(conf->Default_resolution)))) goto Erreur_Retour; values[0]=Video_mode[0].Width; values[1]=Video_mode[0].Height; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Default_window_size",2,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Default_window_size",2,values,0))) goto Erreur_Retour; values[0]=(conf->Mouse_merge_movement); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Merge_movement",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Merge_movement",1,values,0))) goto Erreur_Retour; values[0]=(conf->Palette_cells_X); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Palette_cells_X",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Palette_cells_X",1,values,0))) goto Erreur_Retour; values[0]=(conf->Palette_cells_Y); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Palette_cells_Y",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Palette_cells_Y",1,values,0))) goto Erreur_Retour; for (index=0;indexBookmark_label[index]))) + if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Bookmark_label",conf->Bookmark_label[index]))) goto Erreur_Retour; - if ((return_code=Save_INI_set_strings (Ancien_fichier,Nouveau_fichier,buffer,"Bookmark_directory",conf->Bookmark_directory[index]))) + if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Bookmark_directory",conf->Bookmark_directory[index]))) goto Erreur_Retour; } values[0]=(conf->Palette_vertical); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Palette_vertical",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Palette_vertical",1,values,1))) goto Erreur_Retour; values[0]=conf->Window_pos_x; values[1]=conf->Window_pos_y; - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Window_position",2,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Window_position",2,values,0))) goto Erreur_Retour; values[0]=(conf->Double_click_speed); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Double_click_speed",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Double_click_speed",1,values,0))) goto Erreur_Retour; values[0]=(conf->Double_key_speed); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Double_key_speed",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Double_key_speed",1,values,0))) goto Erreur_Retour; - if ((return_code=Save_INI_set_strings (Ancien_fichier,Nouveau_fichier,buffer,"Skin_file",conf->Skin_file))) + if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Skin_file",conf->Skin_file))) goto Erreur_Retour; - if ((return_code=Save_INI_set_strings (Ancien_fichier,Nouveau_fichier,buffer,"Font_file",conf->Font_file))) + if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Font_file",conf->Font_file))) goto Erreur_Retour; values[0]=(conf->Grid_XOR_color); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Grid_XOR_color",1,values,0))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Grid_XOR_color",1,values,0))) goto Erreur_Retour; values[0]=(Pixel_ratio); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Pixel_ratio",1,values,0))) { + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Pixel_ratio",1,values,0))) { DEBUG("saving pixel ratio",return_code); goto Erreur_Retour; } @@ -670,23 +670,43 @@ int Save_INI(T_Config * conf) for (; index<8;index++) values[0] |= (1<Right_click_colorpick); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Right_click_colorpick",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Right_click_colorpick",1,values,1))) goto Erreur_Retour; values[0]=(conf->Sync_views); - if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Sync_views",1,values,1))) + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Sync_views",1,values,1))) + goto Erreur_Retour; + + switch(conf->Swap_buttons) + { + case MOD_SHIFT: + values[0]=1; + break; + case MOD_CTRL: + values[0]=2; + break; + case MOD_ALT: + values[0]=3; + break; + case MOD_META: + values[0]=4; + break; + default: + values[0]=0; + } + if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Swap_buttons",1,values,0))) goto Erreur_Retour; // Insert new values here - Save_INI_flush(Ancien_fichier,Nouveau_fichier,buffer); + Save_INI_flush(old_file,new_file,buffer); - fclose(Nouveau_fichier); - fclose(Ancien_fichier); + fclose(new_file); + fclose(old_file); // On efface le fichier temporaire <=> Ancienne version du .INI if (ini_file_exists) @@ -698,8 +718,8 @@ int Save_INI(T_Config * conf) Erreur_Retour: - fclose(Nouveau_fichier); - fclose(Ancien_fichier); + fclose(new_file); + fclose(old_file); free(buffer); return return_code; diff --git a/src/struct.h b/src/struct.h index 7b178841..b8221f7e 100644 --- a/src/struct.h +++ b/src/struct.h @@ -358,6 +358,7 @@ typedef struct byte Right_click_colorpick; ///< Boolean, true to enable a "tablet" mode, where RMB acts as instant colorpicker byte Sync_views; ///< Boolean, true when the Main and Spare should share their viewport settings. byte Stylus_mode; ///< Boolean, true to tweak some tools (eg:Curve) for single-button stylus. + word Swap_buttons; ///< Sets which key swaps mouse buttons : 0=none, or MOD_SHIFT, MOD_CTRL, MOD_ALT, MOD_META. } T_Config; // Structures utilisées pour les descriptions de pages et de liste de pages.