Allow bookmark labels to be UTF-8 !
This commit is contained in:
		
							parent
							
								
									ad1c38e2ca
								
							
						
					
					
						commit
						9073c040c9
					
				@ -1175,20 +1175,42 @@ static void Display_bookmark(T_Dropdown_button * Button, int bookmark_number)
 | 
				
			|||||||
  if (Config.Bookmark_directory[bookmark_number])
 | 
					  if (Config.Bookmark_directory[bookmark_number])
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    int label_size;
 | 
					    int label_size;
 | 
				
			||||||
    // Libellé
 | 
					    // Label
 | 
				
			||||||
    Print_in_window_limited(Button->Pos_X+3+10,Button->Pos_Y+2,Config.Bookmark_label[bookmark_number],8,MC_Black,MC_Light);
 | 
					#ifdef ENABLE_FILENAMES_ICONV
 | 
				
			||||||
    label_size=strlen(Config.Bookmark_label[bookmark_number]);
 | 
					    word label[16];
 | 
				
			||||||
 | 
					    char * input = Config.Bookmark_label[bookmark_number];
 | 
				
			||||||
 | 
					    size_t inbytesleft = strlen(Config.Bookmark_label[bookmark_number]);
 | 
				
			||||||
 | 
					    char * output = (char *)label;
 | 
				
			||||||
 | 
					    size_t outbytesleft = sizeof(label) - 2;
 | 
				
			||||||
 | 
					    if (cd_utf16 != (iconv_t)-1 && iconv(cd_utf16, &input, &inbytesleft, &output, &outbytesleft) != (size_t)-1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      output[0] = '\0';
 | 
				
			||||||
 | 
					      output[1] = '\0';
 | 
				
			||||||
 | 
					      Print_in_window_limited_unicode(Button->Pos_X+3+10, Button->Pos_Y+2,
 | 
				
			||||||
 | 
					                                      label, 8, MC_Black, MC_Light);
 | 
				
			||||||
 | 
					      label_size = Unicode_strlen(label);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      // Fallback
 | 
				
			||||||
 | 
					      Print_in_window_limited(Button->Pos_X+3+10, Button->Pos_Y+2,
 | 
				
			||||||
 | 
					                              Config.Bookmark_label[bookmark_number],
 | 
				
			||||||
 | 
					                              8, MC_Black, MC_Light);
 | 
				
			||||||
 | 
					      label_size = strlen(Config.Bookmark_label[bookmark_number]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (label_size<8)
 | 
					    if (label_size<8)
 | 
				
			||||||
      Window_rectangle(Button->Pos_X+3+10+label_size*8,Button->Pos_Y+2,(8-label_size)*8,8,MC_Light);
 | 
					      Window_rectangle(Button->Pos_X+3+10+label_size*8,Button->Pos_Y+2,(8-label_size)*8,8,MC_Light);
 | 
				
			||||||
    // Menu apparait sur clic droit
 | 
					    // the menu is activated with right clic
 | 
				
			||||||
    Button->Active_button=RIGHT_SIDE;
 | 
					    Button->Active_button = RIGHT_SIDE;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    // Libellé
 | 
					    // Label
 | 
				
			||||||
    Print_in_window(Button->Pos_X+3+10,Button->Pos_Y+2,"--------",MC_Dark,MC_Light);
 | 
					    Print_in_window(Button->Pos_X+3+10, Button->Pos_Y+2, "--------",
 | 
				
			||||||
    // Menu apparait sur clic droit ou gauche
 | 
					                    MC_Dark, MC_Light);
 | 
				
			||||||
    Button->Active_button=RIGHT_SIDE|LEFT_SIDE;
 | 
					    // the menu is activated with right or left clic
 | 
				
			||||||
 | 
					    Button->Active_button = RIGHT_SIDE|LEFT_SIDE;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // item actifs
 | 
					  // item actifs
 | 
				
			||||||
  Window_dropdown_clear_items(Button);
 | 
					  Window_dropdown_clear_items(Button);
 | 
				
			||||||
@ -2156,36 +2178,29 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
 | 
				
			|||||||
              case 0: // Set
 | 
					              case 0: // Set
 | 
				
			||||||
                free(Config.Bookmark_directory[clicked_button-10]);
 | 
					                free(Config.Bookmark_directory[clicked_button-10]);
 | 
				
			||||||
                Config.Bookmark_directory[clicked_button-10] = NULL;
 | 
					                Config.Bookmark_directory[clicked_button-10] = NULL;
 | 
				
			||||||
                Config.Bookmark_label[clicked_button-10][0]='\0';
 | 
					                Config.Bookmark_label[clicked_button-10][0] = '\0';
 | 
				
			||||||
                temp=strlen(Selector->Directory);
 | 
					                Config.Bookmark_directory[clicked_button-10] = strdup(Selector->Directory);
 | 
				
			||||||
                Config.Bookmark_directory[clicked_button-10]=malloc(temp+1);
 | 
					 | 
				
			||||||
                strcpy(Config.Bookmark_directory[clicked_button-10],Selector->Directory);
 | 
					 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                directory_name=Find_last_separator(Selector->Directory);
 | 
					                directory_name = Find_last_separator(Selector->Directory);
 | 
				
			||||||
                if (directory_name && directory_name[1]!='\0')
 | 
					                if (directory_name && directory_name[1] != '\0')
 | 
				
			||||||
                  directory_name++;
 | 
					                  directory_name++;
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                  directory_name=Selector->Directory;
 | 
					                  directory_name = Selector->Directory;
 | 
				
			||||||
                temp=strlen(directory_name);
 | 
					                strncpy(Config.Bookmark_label[clicked_button-10], directory_name, sizeof(Config.Bookmark_label[0]) - 1);
 | 
				
			||||||
                strncpy(Config.Bookmark_label[clicked_button-10],directory_name,8);
 | 
					                Config.Bookmark_label[clicked_button-10][sizeof(Config.Bookmark_label[0]) - 1]='\0';
 | 
				
			||||||
                if (temp>8)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                  Config.Bookmark_label[clicked_button-10][7]=ELLIPSIS_CHARACTER;
 | 
					 | 
				
			||||||
                  Config.Bookmark_label[clicked_button-10][8]='\0';
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
					                Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
              case 1: // Rename
 | 
					              case 1: // Rename
 | 
				
			||||||
                if (Config.Bookmark_directory[clicked_button-10])
 | 
					                if (Config.Bookmark_directory[clicked_button-10])
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  // On enlève les "..." avant l'édition
 | 
					                  char bookmark_label[24];
 | 
				
			||||||
                  char bookmark_label[8+1];
 | 
					                  /// @todo convert label to unicode before editing
 | 
				
			||||||
                  strcpy(bookmark_label, Config.Bookmark_label[clicked_button-10]);
 | 
					                  strcpy(bookmark_label, Config.Bookmark_label[clicked_button-10]);
 | 
				
			||||||
                  if (bookmark_label[7]==ELLIPSIS_CHARACTER)
 | 
					                  if (Readline_ex(bookmark_dropdown[clicked_button-10]->Pos_X+3+10,
 | 
				
			||||||
                    bookmark_label[7]='\0';
 | 
					                                  bookmark_dropdown[clicked_button-10]->Pos_Y+2,
 | 
				
			||||||
                  if (Readline_ex(bookmark_dropdown[clicked_button-10]->Pos_X+3+10,bookmark_dropdown[clicked_button-10]->Pos_Y+2,bookmark_label,8,8,INPUT_TYPE_STRING,0))
 | 
					                                  bookmark_label, 8, sizeof(bookmark_label) - 1, INPUT_TYPE_STRING, 0))
 | 
				
			||||||
                    strcpy(Config.Bookmark_label[clicked_button-10],bookmark_label);
 | 
					                    strcpy(Config.Bookmark_label[clicked_button-10], bookmark_label);
 | 
				
			||||||
                  Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
					                  Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
				
			||||||
                  Display_cursor();
 | 
					                  Display_cursor();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -2209,18 +2224,13 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
 | 
				
			|||||||
                  Config.Bookmark_directory[clicked_button-10] = NULL;
 | 
					                  Config.Bookmark_directory[clicked_button-10] = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  Config.Bookmark_directory[clicked_button-10] = strdup(rel_path);
 | 
					                  Config.Bookmark_directory[clicked_button-10] = strdup(rel_path);
 | 
				
			||||||
                  directory_name=Find_last_separator(Selector->Directory);
 | 
					                  directory_name = Find_last_separator(Selector->Directory);
 | 
				
			||||||
                  if (directory_name && directory_name[1]!='\0')
 | 
					                  if (directory_name && directory_name[1]!='\0')
 | 
				
			||||||
                    directory_name++;
 | 
					                    directory_name++;
 | 
				
			||||||
                  else
 | 
					                  else
 | 
				
			||||||
                    directory_name=Selector->Directory;
 | 
					                    directory_name=Selector->Directory;
 | 
				
			||||||
                  temp=strlen(directory_name);
 | 
					                  strncpy(Config.Bookmark_label[clicked_button-10], directory_name, sizeof(Config.Bookmark_label[0]) - 1);
 | 
				
			||||||
                  strncpy(Config.Bookmark_label[clicked_button-10],directory_name,8);
 | 
					                  Config.Bookmark_label[clicked_button-10][sizeof(Config.Bookmark_label[0]) - 1] = '\0';
 | 
				
			||||||
                  if (temp>8)
 | 
					 | 
				
			||||||
                  {
 | 
					 | 
				
			||||||
                    Config.Bookmark_label[clicked_button-10][7]=ELLIPSIS_CHARACTER;
 | 
					 | 
				
			||||||
                    Config.Bookmark_label[clicked_button-10][8]='\0';
 | 
					 | 
				
			||||||
                  }
 | 
					 | 
				
			||||||
                  Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
					                  Display_bookmark(bookmark_dropdown[clicked_button-10],clicked_button-10);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
 | 
				
			|||||||
@ -833,15 +833,16 @@ int Load_INI(T_Config * conf)
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    if (!Load_INI_get_string (file,buffer,"Bookmark_label",value_label, 1))
 | 
					    if (!Load_INI_get_string (file,buffer,"Bookmark_label",value_label, 1))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      int size=strlen(value_label);
 | 
					      int size = strlen(value_label);
 | 
				
			||||||
      if (size!=0)
 | 
					      if (size!=0)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        if (size>8)
 | 
					        if (size >= sizeof(conf->Bookmark_label[0]))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          value_label[7]=ELLIPSIS_CHARACTER;
 | 
					          memcpy(conf->Bookmark_label[index], value_label, sizeof(conf->Bookmark_label[0]) - 1);
 | 
				
			||||||
          value_label[8]='\0';
 | 
					          conf->Bookmark_label[index][sizeof(conf->Bookmark_label[0]) - 1] = '\0';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        strcpy(conf->Bookmark_label[index],value_label);
 | 
					        else
 | 
				
			||||||
 | 
					          memcpy(conf->Bookmark_label[index], value_label, size + 1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
				
			|||||||
@ -366,7 +366,7 @@ typedef struct
 | 
				
			|||||||
  byte Auto_nb_used;                     ///< Boolean, true to count colors in Palette screen.
 | 
					  byte Auto_nb_used;                     ///< Boolean, true to count colors in Palette screen.
 | 
				
			||||||
  byte Default_resolution;               ///< Default video mode to use on startup. Index in ::Video_mode.
 | 
					  byte Default_resolution;               ///< Default video mode to use on startup. Index in ::Video_mode.
 | 
				
			||||||
  char *Bookmark_directory[NB_BOOKMARKS];///< Bookmarked directories in fileselectors: This is the full directory name.
 | 
					  char *Bookmark_directory[NB_BOOKMARKS];///< Bookmarked directories in fileselectors: This is the full directory name.
 | 
				
			||||||
  char Bookmark_label[NB_BOOKMARKS][8+1];///< Bookmarked directories in fileselectors: This is the displayed name.
 | 
					  char Bookmark_label[NB_BOOKMARKS][24]; ///< Bookmarked directories in fileselectors: This is the displayed name.
 | 
				
			||||||
  int  Window_pos_x;                     ///< Last window x position (9999 if unsupportd/irrelevant for the platform)
 | 
					  int  Window_pos_x;                     ///< Last window x position (9999 if unsupportd/irrelevant for the platform)
 | 
				
			||||||
  int  Window_pos_y;                     ///< Last window y position (9999 if unsupportd/irrelevant for the platform)
 | 
					  int  Window_pos_y;                     ///< Last window y position (9999 if unsupportd/irrelevant for the platform)
 | 
				
			||||||
  word Double_click_speed;               ///< Maximum delay for double-click, in ms.
 | 
					  word Double_click_speed;               ///< Maximum delay for double-click, in ms.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user