Fix for file browser filter shortcuts and toggled state images. Courtesy of Sankey. Issue 1403
This commit is contained in:
@@ -146,7 +146,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bFilterClear->set_relief (Gtk::RELIEF_NONE);
|
bFilterClear->set_relief (Gtk::RELIEF_NONE);
|
||||||
bFilterClear->set_tooltip_markup (M("FILEBROWSER_SHOWDIRHINT"));
|
bFilterClear->set_tooltip_markup (M("FILEBROWSER_SHOWDIRHINT"));
|
||||||
bFilterClear->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bFilterClear->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
bCateg[0] = bFilterClear->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bFilterClear));
|
bCateg[0] = bFilterClear->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bFilterClear, true));
|
||||||
buttonBar->pack_start (*bFilterClear, Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*bFilterClear, Gtk::PACK_SHRINK);
|
||||||
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bUnRanked->set_image (*igUnRanked);
|
bUnRanked->set_image (*igUnRanked);
|
||||||
bUnRanked->set_relief (Gtk::RELIEF_NONE);
|
bUnRanked->set_relief (Gtk::RELIEF_NONE);
|
||||||
bUnRanked->set_tooltip_markup (M("FILEBROWSER_SHOWUNRANKHINT"));
|
bUnRanked->set_tooltip_markup (M("FILEBROWSER_SHOWUNRANKHINT"));
|
||||||
bCateg[1] = bUnRanked->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnRanked));
|
bCateg[1] = bUnRanked->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnRanked, true));
|
||||||
fltrRankbox->pack_start (*bUnRanked, Gtk::PACK_SHRINK);
|
fltrRankbox->pack_start (*bUnRanked, Gtk::PACK_SHRINK);
|
||||||
bUnRanked->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bUnRanked->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bRank[i]->set_image (*igranked[i]);
|
bRank[i]->set_image (*igranked[i]);
|
||||||
bRank[i]->set_relief (Gtk::RELIEF_NONE);
|
bRank[i]->set_relief (Gtk::RELIEF_NONE);
|
||||||
fltrRankbox->pack_start (*bRank[i], Gtk::PACK_SHRINK);
|
fltrRankbox->pack_start (*bRank[i], Gtk::PACK_SHRINK);
|
||||||
bCateg[i+2] = bRank[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bRank[i]));
|
bCateg[i+2] = bRank[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bRank[i], true));
|
||||||
bRank[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bRank[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +185,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bUnCLabeled->set_image (*igUnCLabeled);
|
bUnCLabeled->set_image (*igUnCLabeled);
|
||||||
bUnCLabeled->set_relief (Gtk::RELIEF_NONE);
|
bUnCLabeled->set_relief (Gtk::RELIEF_NONE);
|
||||||
bUnCLabeled->set_tooltip_markup (M("FILEBROWSER_SHOWUNCOLORHINT"));
|
bUnCLabeled->set_tooltip_markup (M("FILEBROWSER_SHOWUNCOLORHINT"));
|
||||||
bCateg[7] = bUnCLabeled->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnCLabeled));
|
bCateg[7] = bUnCLabeled->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnCLabeled, true));
|
||||||
fltrLabelbox->pack_start (*bUnCLabeled, Gtk::PACK_SHRINK);
|
fltrLabelbox->pack_start (*bUnCLabeled, Gtk::PACK_SHRINK);
|
||||||
bUnCLabeled->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bUnCLabeled->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bCLabel[i]->set_image (*igCLabeled[i]);
|
bCLabel[i]->set_image (*igCLabeled[i]);
|
||||||
bCLabel[i]->set_relief (Gtk::RELIEF_NONE);
|
bCLabel[i]->set_relief (Gtk::RELIEF_NONE);
|
||||||
fltrLabelbox->pack_start (*bCLabel[i], Gtk::PACK_SHRINK);
|
fltrLabelbox->pack_start (*bCLabel[i], Gtk::PACK_SHRINK);
|
||||||
bCateg[i+8] = bCLabel[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bCLabel[i]));
|
bCateg[i+8] = bCLabel[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bCLabel[i], true));
|
||||||
bCLabel[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bCLabel[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bEdited[i]->set_relief (Gtk::RELIEF_NONE);
|
bEdited[i]->set_relief (Gtk::RELIEF_NONE);
|
||||||
fltrEditedBox->pack_start (*bEdited[i], Gtk::PACK_SHRINK);
|
fltrEditedBox->pack_start (*bEdited[i], Gtk::PACK_SHRINK);
|
||||||
//13, 14
|
//13, 14
|
||||||
bCateg[i+13] = bEdited[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bEdited[i]));
|
bCateg[i+13] = bEdited[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bEdited[i], true));
|
||||||
bEdited[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bEdited[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
}
|
}
|
||||||
bEdited[0]->set_tooltip_markup (M("FILEBROWSER_SHOWEDITEDNOTHINT"));
|
bEdited[0]->set_tooltip_markup (M("FILEBROWSER_SHOWEDITEDNOTHINT"));
|
||||||
@@ -256,7 +256,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bRecentlySaved[i]->set_relief (Gtk::RELIEF_NONE);
|
bRecentlySaved[i]->set_relief (Gtk::RELIEF_NONE);
|
||||||
fltrRecentlySavedBox->pack_start (*bRecentlySaved[i], Gtk::PACK_SHRINK);
|
fltrRecentlySavedBox->pack_start (*bRecentlySaved[i], Gtk::PACK_SHRINK);
|
||||||
//15, 16
|
//15, 16
|
||||||
bCateg[i+15] = bRecentlySaved[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bRecentlySaved[i]));
|
bCateg[i+15] = bRecentlySaved[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bRecentlySaved[i], true));
|
||||||
bRecentlySaved[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bRecentlySaved[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
}
|
}
|
||||||
bRecentlySaved[0]->set_tooltip_markup (M("FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT"));
|
bRecentlySaved[0]->set_tooltip_markup (M("FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT"));
|
||||||
@@ -276,7 +276,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bTrash->set_image (*iTrashEmpty);
|
bTrash->set_image (*iTrashEmpty);
|
||||||
bTrash->set_relief (Gtk::RELIEF_NONE);
|
bTrash->set_relief (Gtk::RELIEF_NONE);
|
||||||
bTrash->set_tooltip_markup (M("FILEBROWSER_SHOWTRASHHINT"));
|
bTrash->set_tooltip_markup (M("FILEBROWSER_SHOWTRASHHINT"));
|
||||||
bCateg[17] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash));
|
bCateg[17] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash, true));
|
||||||
bTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
bTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
|
||||||
buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK);
|
||||||
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
||||||
@@ -1047,7 +1047,7 @@ void FileCatalog::clearFromCacheRequested (std::vector<FileBrowserEntry*> tbe,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
|
void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick) {
|
||||||
|
|
||||||
//was control key pressed
|
//was control key pressed
|
||||||
bool control_down = modifierKey & GDK_CONTROL_MASK;
|
bool control_down = modifierKey & GDK_CONTROL_MASK;
|
||||||
@@ -1058,7 +1058,9 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
|
|||||||
for (int i=0; i<18; i++)
|
for (int i=0; i<18; i++)
|
||||||
bCateg[i].block (true);
|
bCateg[i].block (true);
|
||||||
|
|
||||||
//button is already toggled when entering this function, so we switch it back to its initial state
|
// button already toggled when entering this function from a mouse click, so
|
||||||
|
// we switch it back to its initial state.
|
||||||
|
if (isMouseClick)
|
||||||
b->set_active(!b->get_active());
|
b->set_active(!b->get_active());
|
||||||
|
|
||||||
//if both control and shift keys were pressed, do nothing
|
//if both control and shift keys were pressed, do nothing
|
||||||
@@ -1080,9 +1082,23 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
|
|||||||
if (categoryButtons[i] == b) toggled_button = i;
|
if (categoryButtons[i] == b) toggled_button = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if no modifier key were pressed, we can switch-on the button, and clear all others
|
// if no modifier key is pressed,
|
||||||
if (!(control_down || shift_down)) {
|
if (!(control_down || shift_down)) {
|
||||||
for (int i=0; i<18; i++) {
|
// if we're deselecting the only star still active
|
||||||
|
if (toggled_stars_count == 1 && (buttons & (1 << toggled_button))) {
|
||||||
|
// activate clear-filters
|
||||||
|
categoryButtons[0]->set_active (true);
|
||||||
|
// deactivate the toggled filter
|
||||||
|
categoryButtons[toggled_button]->set_active (false);
|
||||||
|
}
|
||||||
|
// if we're deselecting trash
|
||||||
|
else if (toggled_button == 17 && (buttons & (1 << toggled_button))) {
|
||||||
|
categoryButtons[0]->set_active (true);
|
||||||
|
categoryButtons[17]->set_active (false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// activate the toggled filter, deactivate the rest
|
||||||
|
for (int i=0; i<18; i++)
|
||||||
categoryButtons[i]->set_active (i==toggled_button);
|
categoryButtons[i]->set_active (i==toggled_button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1091,7 +1107,7 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
|
|||||||
if (control_down) {
|
if (control_down) {
|
||||||
//control is pressed
|
//control is pressed
|
||||||
if (toggled_stars_count == 1 && (buttons & (1 << toggled_button))) {
|
if (toggled_stars_count == 1 && (buttons & (1 << toggled_button))) {
|
||||||
//we're deselecting the only star still active, so we activate the folder filter
|
//we're deselecting the only star still active, so we activate clear-filters
|
||||||
categoryButtons[0]->set_active(true);
|
categoryButtons[0]->set_active(true);
|
||||||
//and we deselect the toggled star
|
//and we deselect the toggled star
|
||||||
categoryButtons[toggled_button]->set_active (false);
|
categoryButtons[toggled_button]->set_active (false);
|
||||||
@@ -1631,28 +1647,28 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
|
|||||||
if (!alt) {
|
if (!alt) {
|
||||||
switch(event->keyval) {
|
switch(event->keyval) {
|
||||||
case GDK_grave:
|
case GDK_grave:
|
||||||
categoryButtonToggled(bUnRanked);
|
categoryButtonToggled(bUnRanked,false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_1:
|
case GDK_1:
|
||||||
categoryButtonToggled(bRank[0]);
|
categoryButtonToggled(bRank[0],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_2:
|
case GDK_2:
|
||||||
categoryButtonToggled(bRank[1]);
|
categoryButtonToggled(bRank[1],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_3:
|
case GDK_3:
|
||||||
categoryButtonToggled(bRank[2]);
|
categoryButtonToggled(bRank[2],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_4:
|
case GDK_4:
|
||||||
categoryButtonToggled(bRank[3]);
|
categoryButtonToggled(bRank[3],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_5:
|
case GDK_5:
|
||||||
categoryButtonToggled(bRank[4]);
|
categoryButtonToggled(bRank[4],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_6:
|
case GDK_6:
|
||||||
categoryButtonToggled(bEdited[0]);
|
categoryButtonToggled(bEdited[0],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_7:
|
case GDK_7:
|
||||||
categoryButtonToggled(bEdited[1]);
|
categoryButtonToggled(bEdited[1],false);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case GDK_Return:
|
case GDK_Return:
|
||||||
@@ -1665,28 +1681,28 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
|
|||||||
if (alt) {
|
if (alt) {
|
||||||
switch(event->keyval) {
|
switch(event->keyval) {
|
||||||
case GDK_grave:
|
case GDK_grave:
|
||||||
categoryButtonToggled(bUnCLabeled);
|
categoryButtonToggled(bUnCLabeled,false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_1:
|
case GDK_1:
|
||||||
categoryButtonToggled(bCLabel[0]);
|
categoryButtonToggled(bCLabel[0],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_2:
|
case GDK_2:
|
||||||
categoryButtonToggled(bCLabel[1]);
|
categoryButtonToggled(bCLabel[1],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_3:
|
case GDK_3:
|
||||||
categoryButtonToggled(bCLabel[2]);
|
categoryButtonToggled(bCLabel[2],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_4:
|
case GDK_4:
|
||||||
categoryButtonToggled(bCLabel[3]);
|
categoryButtonToggled(bCLabel[3],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_5:
|
case GDK_5:
|
||||||
categoryButtonToggled(bCLabel[4]);
|
categoryButtonToggled(bCLabel[4],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_6:
|
case GDK_6:
|
||||||
categoryButtonToggled(bRecentlySaved[0]);
|
categoryButtonToggled(bRecentlySaved[0],false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_7:
|
case GDK_7:
|
||||||
categoryButtonToggled(bRecentlySaved[1]);
|
categoryButtonToggled(bRecentlySaved[1],false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1695,11 +1711,11 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
|
|||||||
switch(event->keyval) {
|
switch(event->keyval) {
|
||||||
case GDK_d:
|
case GDK_d:
|
||||||
case GDK_D:
|
case GDK_D:
|
||||||
categoryButtonToggled(bFilterClear);
|
categoryButtonToggled(bFilterClear,false);
|
||||||
return true;
|
return true;
|
||||||
case GDK_t:
|
case GDK_t:
|
||||||
case GDK_T:
|
case GDK_T:
|
||||||
categoryButtonToggled(bTrash);
|
categoryButtonToggled(bTrash,false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -210,7 +210,7 @@ class FileCatalog : public Gtk::VBox,
|
|||||||
void setFilterPanel (FilterPanel* fpanel);
|
void setFilterPanel (FilterPanel* fpanel);
|
||||||
void setExportPanel (ExportPanel* expanel);
|
void setExportPanel (ExportPanel* expanel);
|
||||||
void exifInfoButtonToggled();
|
void exifInfoButtonToggled();
|
||||||
void categoryButtonToggled (Gtk::ToggleButton* b);
|
void categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick);
|
||||||
bool capture_event(GdkEventButton* event);
|
bool capture_event(GdkEventButton* event);
|
||||||
void filterChanged ();
|
void filterChanged ();
|
||||||
void runFilterDialog ();
|
void runFilterDialog ();
|
||||||
|
Reference in New Issue
Block a user