This commit is contained in:
@@ -36,7 +36,6 @@ ImageArea::ImageArea (ImageAreaPanel* p) : parent(p) {
|
||||
flawnOverWindow = NULL;
|
||||
mainCropWindow = NULL;
|
||||
previewHandler = NULL;
|
||||
lastClosedX = -1;
|
||||
showClippedH = false;
|
||||
showClippedS = false;
|
||||
listener = NULL;
|
||||
@@ -106,10 +105,6 @@ void ImageArea::setImProcCoordinator (rtengine::StagedImageProcessor* ipc_) {
|
||||
if( !ipc_ ){
|
||||
focusGrabber = NULL;
|
||||
std::list<CropWindow*>::iterator i = cropWins.begin();
|
||||
if( i!=cropWins.end() ){
|
||||
(*i)->getPosition (lastClosedX, lastClosedY);
|
||||
(*i)->getSize (lastClosedW, lastClosedH);
|
||||
}
|
||||
for( ;i!=cropWins.end();i++ ){
|
||||
delete *i;
|
||||
}
|
||||
@@ -350,7 +345,8 @@ void ImageArea::unGrabFocus () {
|
||||
}
|
||||
|
||||
void ImageArea::addCropWindow () {
|
||||
if (!mainCropWindow) return; // if called but no image is loaded, it would crash
|
||||
if (!mainCropWindow)
|
||||
return; // if called but no image is loaded, it would crash
|
||||
|
||||
CropWindow* cw = new CropWindow (this, ipc, true);
|
||||
cw->zoom11();
|
||||
@@ -359,60 +355,65 @@ void ImageArea::addCropWindow () {
|
||||
cw->setPointerMotionHListener (pmhlistener);
|
||||
int lastWidth = options.detailWindowWidth;
|
||||
int lastHeight = options.detailWindowHeight;
|
||||
if (lastWidth<lastHeight)
|
||||
lastHeight=lastWidth;
|
||||
if (lastHeight<lastWidth)
|
||||
lastWidth=lastHeight;
|
||||
|
||||
if(!cropWins.empty()) {
|
||||
CropWindow *lastCrop;
|
||||
lastCrop = cropWins.front();
|
||||
if(lastCrop)
|
||||
lastCrop->getSize(lastWidth,lastHeight);
|
||||
}
|
||||
|
||||
cropWins.push_front (cw);
|
||||
|
||||
// Position the new crop window in a checkerboard, or used the last position
|
||||
if (lastClosedX<0) {
|
||||
int K = 2;
|
||||
int hBorder = get_width()/K/8;
|
||||
int vBorder = get_height()/K/8;
|
||||
int N = cropWins.size()-1;
|
||||
int layer = N/K/K;
|
||||
int row = K-1 - (N % (K*K)) / K;
|
||||
int col = K-1 - (N % (K*K)) % K;
|
||||
int cropwidth, cropheight;
|
||||
|
||||
if(lastWidth == -1) {
|
||||
cropwidth = get_width()/K - hBorder;
|
||||
cropheight = get_height()/K - vBorder;
|
||||
} else {
|
||||
cropwidth = lastWidth;
|
||||
cropheight = lastHeight;
|
||||
}
|
||||
// Position the new crop window this way: start from top right going down to bottom. When bottom is reached, continue top left going down......
|
||||
int N = cropWins.size()-1;
|
||||
int cropwidth, cropheight;
|
||||
|
||||
if(lastWidth <= 0) { // this is only the case for very first start of RT 4.1 or when options file is deleted
|
||||
cropwidth = 200;
|
||||
cropheight = 200;
|
||||
} else {
|
||||
cropwidth = lastWidth;
|
||||
cropheight = lastHeight;
|
||||
}
|
||||
|
||||
if (options.squareDetailWindow){
|
||||
// force square CropWindow (this is faster as area is smaller)
|
||||
if (cropwidth<cropheight) cropheight=cropwidth;
|
||||
if (cropheight<cropwidth) cropwidth=cropheight;
|
||||
}
|
||||
cw->setSize (cropwidth,cropheight);
|
||||
int x,y;
|
||||
int maxRows = get_height()/cropheight;
|
||||
if(maxRows == 0)
|
||||
maxRows = 1;
|
||||
|
||||
cw->setSize (cropwidth,cropheight);
|
||||
cw->setPosition (col*get_width()/K + hBorder/2 + layer*30, row*get_height()/K + vBorder/2 + layer*30);
|
||||
}
|
||||
else {
|
||||
cw->setSize(lastClosedW, lastClosedH);
|
||||
cw->setPosition (lastClosedX, lastClosedY);
|
||||
lastClosedX = -1;
|
||||
}
|
||||
int col = N / maxRows;
|
||||
if(col % 2) { // from left side
|
||||
col = col/2;
|
||||
x = col*cropwidth;
|
||||
if(x >= get_width() - 50)
|
||||
x = get_width() - 50;
|
||||
}
|
||||
else { // from right side
|
||||
col /= 2;
|
||||
col++;
|
||||
x = get_width() - col * cropwidth;
|
||||
if(x <= 0)
|
||||
x = 0;
|
||||
}
|
||||
|
||||
cw->enable(); // start processing!
|
||||
y = cropheight * (N%maxRows);
|
||||
cw->setPosition (x, y);
|
||||
cw->enable(); // start processing!
|
||||
|
||||
int x0,y0,w,h,wc,hc;
|
||||
mainCropWindow->getCropRectangle(x0,y0,w,h );
|
||||
cw->getCropSize(wc,hc);
|
||||
cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2);
|
||||
mainCropWindow->setObservedCropWin (cropWins.front());
|
||||
int x0,y0,w,h,wc,hc;
|
||||
mainCropWindow->getCropRectangle(x0,y0,w,h );
|
||||
cw->getCropSize(wc,hc);
|
||||
cw->setCropPosition(x0+w/2-wc/2,y0+h/2-hc/2);
|
||||
mainCropWindow->setObservedCropWin (cropWins.front());
|
||||
|
||||
if(cropWins.size()==1) // after first detail window we already have high quality
|
||||
ipc->startProcessing(M_HIGHQUAL);
|
||||
|
||||
// queue_draw ();
|
||||
}
|
||||
|
||||
|
||||
@@ -428,8 +429,6 @@ void ImageArea::cropWindowSelected (CropWindow* cw) {
|
||||
void ImageArea::cropWindowClosed (CropWindow* cw) {
|
||||
|
||||
focusGrabber = NULL;
|
||||
cw->getPosition (lastClosedX, lastClosedY);
|
||||
cw->getSize (lastClosedW, lastClosedH);
|
||||
std::list<CropWindow*>::iterator i = std::find (cropWins.begin(), cropWins.end(), cw);
|
||||
if (i!=cropWins.end())
|
||||
cropWins.erase (i);
|
||||
|
||||
@@ -51,8 +51,6 @@ class ImageArea : public Gtk::DrawingArea, public CropWindowListener, public Edi
|
||||
PreviewHandler* previewHandler;
|
||||
rtengine::StagedImageProcessor* ipc;
|
||||
|
||||
int lastClosedX, lastClosedY, lastClosedW, lastClosedH;
|
||||
|
||||
bool dirty;
|
||||
CropWindow* focusGrabber;
|
||||
CropGUIListener* cropgl;
|
||||
|
||||
@@ -355,7 +355,6 @@ void Options::setDefaults () {
|
||||
hideTPVScrollbar = false;
|
||||
UseIconNoText = true;
|
||||
whiteBalanceSpotSize = 8;
|
||||
squareDetailWindow = true;
|
||||
menuGroupRank = true;
|
||||
menuGroupLabel = true;
|
||||
menuGroupFileOperations = true;
|
||||
@@ -739,7 +738,6 @@ if (keyFile.has_group ("GUI")) {
|
||||
if (keyFile.has_key ("GUI", "HistogramBar")) histogramBar = keyFile.get_boolean ("GUI", "HistogramBar");
|
||||
if (keyFile.has_key ("GUI", "HistogramFullMode")) histogramFullMode = keyFile.get_boolean ("GUI", "HistogramFullMode");
|
||||
if (keyFile.has_key ("GUI", "ShowProfileSelector")) showProfileSelector = keyFile.get_boolean ("GUI", "ShowProfileSelector");
|
||||
if (keyFile.has_key ("GUI", "SquareDetailWindow")) squareDetailWindow = keyFile.get_boolean ("GUI", "SquareDetailWindow");
|
||||
if (keyFile.has_key ("GUI", "FileBrowserToolbarSingleRow")) FileBrowserToolbarSingleRow = keyFile.get_boolean ("GUI", "FileBrowserToolbarSingleRow");
|
||||
if (keyFile.has_key ("GUI", "HideTPVScrollbar")) hideTPVScrollbar = keyFile.get_boolean ("GUI", "HideTPVScrollbar");
|
||||
if (keyFile.has_key ("GUI", "UseIconNoText")) UseIconNoText = keyFile.get_boolean ("GUI", "UseIconNoText");
|
||||
@@ -1031,7 +1029,6 @@ int Options::saveToFile (Glib::ustring fname) {
|
||||
keyFile.set_boolean ("GUI", "HistogramBar", histogramBar);
|
||||
keyFile.set_boolean ("GUI", "HistogramFullMode", histogramFullMode);
|
||||
keyFile.set_boolean ("GUI", "ShowProfileSelector", showProfileSelector);
|
||||
keyFile.set_boolean ("GUI", "SquareDetailWindow", squareDetailWindow);
|
||||
keyFile.set_boolean ("GUI", "FileBrowserToolbarSingleRow", FileBrowserToolbarSingleRow);
|
||||
keyFile.set_boolean ("GUI", "HideTPVScrollbar", hideTPVScrollbar);
|
||||
keyFile.set_boolean ("GUI", "UseIconNoText", UseIconNoText);
|
||||
|
||||
@@ -203,7 +203,6 @@ class Options {
|
||||
bool histogramBar;
|
||||
bool histogramFullMode;
|
||||
bool showProfileSelector;
|
||||
bool squareDetailWindow;
|
||||
bool FileBrowserToolbarSingleRow;
|
||||
bool hideTPVScrollbar;
|
||||
bool UseIconNoText;
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include <sstream>
|
||||
#include "../rtengine/safegtk.h"
|
||||
#include "rtimage.h"
|
||||
|
||||
|
||||
extern Options options;
|
||||
extern Glib::ustring argv0;
|
||||
|
||||
@@ -77,7 +77,6 @@ Preferences::Preferences (RTWindow *rtwindow) : rprofiles(NULL), iprofiles(NULL
|
||||
buttonpanel->pack_start (*about, Gtk::PACK_SHRINK, 0);
|
||||
buttonpanel->pack_end (*ok, Gtk::PACK_SHRINK, 0);
|
||||
buttonpanel->pack_end (*cancel, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
nb->append_page (*getGeneralPanel(), M("PREFERENCES_TAB_GENERAL"));
|
||||
nb->append_page (*getProcParamsPanel(), M("PREFERENCES_TAB_IMPROC"));
|
||||
nb->append_page (*getFileBrowserPanel(), M("PREFERENCES_TAB_BROWSER"));
|
||||
@@ -604,13 +603,14 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
||||
ckbHistogramWorking = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_HISTOGRAMWORKING")) );
|
||||
ckbHistogramWorking->set_tooltip_markup (M("PREFERENCES_HISTOGRAM_TOOLTIP"));
|
||||
|
||||
hbworkflow2->pack_start (*ckbHistogramWorking, Gtk::PACK_SHRINK, 4);
|
||||
ckbShowProfileSelector = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWPROFILESELECTOR")) );
|
||||
hbworkflow2->pack_start (*ckbShowProfileSelector, Gtk::PACK_SHRINK, 4);
|
||||
ckbSquareDetailWindow = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SQUAREDETAILWINDOW")) );
|
||||
hbworkflow2->pack_start (*ckbSquareDetailWindow, Gtk::PACK_SHRINK, 4);
|
||||
hbworkflow2->pack_start (*ckbHistogramWorking, Gtk::PACK_SHRINK, 4);
|
||||
vbworkflow->pack_start (*hbworkflow2, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
ckbShowProfileSelector = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWPROFILESELECTOR")) );
|
||||
Gtk::HBox* hbworkflow2d5 = Gtk::manage( new Gtk::HBox () );
|
||||
hbworkflow2d5->pack_start (*ckbShowProfileSelector, Gtk::PACK_SHRINK, 4);
|
||||
vbworkflow->pack_start (*hbworkflow2d5, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
Gtk::HBox* hbworkflow3 = Gtk::manage( new Gtk::HBox () );
|
||||
ckbFileBrowserToolbarSingleRow = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_FILEBROWSERTOOLBARSINGLEROW")) );
|
||||
|
||||
@@ -676,13 +676,12 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
||||
butNavGuideCol= Gtk::manage( new Gtk::ColorButton() );
|
||||
butNavGuideCol->set_use_alpha(true);
|
||||
|
||||
slimUI = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SLIMUI")) );
|
||||
hbUseSystemTheme->pack_start(*chUseSystemTheme, Gtk::PACK_SHRINK);
|
||||
hbUseSystemTheme->pack_start (*useNextStart, Gtk::PACK_SHRINK, 0);
|
||||
hbUseSystemTheme->pack_end (*butNavGuideCol, Gtk::PACK_SHRINK, 0);
|
||||
hbUseSystemTheme->pack_end (*navGuideLabel, Gtk::PACK_SHRINK, 0);
|
||||
hbUseSystemTheme->pack_end (*butCropCol, Gtk::PACK_SHRINK, 0);
|
||||
hbUseSystemTheme->pack_end (*cutOverlayLabel, Gtk::PACK_SHRINK, 0);
|
||||
vbftheme->pack_start(*hbUseSystemTheme, Gtk::PACK_SHRINK, 0);
|
||||
hbUseSystemTheme->pack_end(*slimUI, Gtk::PACK_SHRINK, 0);
|
||||
vbftheme->pack_start(*hbUseSystemTheme, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
|
||||
hbtheme = Gtk::manage( new Gtk::HBox () );
|
||||
hbtheme->set_spacing (4);
|
||||
@@ -706,9 +705,17 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
||||
hbtheme->pack_start (*fontbutton);
|
||||
vbftheme->pack_start(*hbtheme, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
slimUI = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SLIMUI")) );
|
||||
vbftheme->pack_start(*slimUI, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
|
||||
Gtk::HBox* hbcolorchooser = Gtk::manage( new Gtk::HBox () );
|
||||
hbcolorchooser->set_spacing(4);
|
||||
|
||||
hbcolorchooser->pack_start (*cutOverlayLabel, Gtk::PACK_SHRINK, 0);
|
||||
hbcolorchooser->pack_start (*butCropCol, Gtk::PACK_SHRINK, 0);
|
||||
hbcolorchooser->pack_end (*butNavGuideCol, Gtk::PACK_SHRINK, 0);
|
||||
hbcolorchooser->pack_end (*navGuideLabel, Gtk::PACK_SHRINK, 0);
|
||||
vbftheme->pack_start(*hbcolorchooser, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
|
||||
ftheme->add (*vbftheme);
|
||||
mvbsd->pack_start (*ftheme, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
@@ -718,11 +725,9 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
||||
hbcd->set_spacing(4);
|
||||
|
||||
Gtk::Frame* frl = Gtk::manage( new Gtk::Frame (M("PREFERENCES_CLIPPINGIND")));
|
||||
blinkClipped = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_BLINKCLIPPED")) );
|
||||
Gtk::VBox* vbrl = Gtk::manage( new Gtk::VBox () );
|
||||
vbrl->set_border_width(4);
|
||||
vbrl->set_spacing (4);
|
||||
vbrl->pack_start (*blinkClipped, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
Gtk::HBox* vbhl = Gtk::manage( new Gtk::HBox () );
|
||||
vbhl->set_spacing(4);
|
||||
@@ -755,21 +760,6 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
||||
Gtk::VBox* dfpfvb = Gtk::manage( new Gtk::VBox () );
|
||||
dfpfvb->set_spacing (4);
|
||||
|
||||
Gtk::Frame* fdf = Gtk::manage( new Gtk::Frame (M("PREFERENCES_DATEFORMATFRAME")) );
|
||||
|
||||
Gtk::HBox* hb6 = Gtk::manage( new Gtk::HBox () );
|
||||
hb6->set_border_width (4);
|
||||
hb6->set_spacing (4);
|
||||
Gtk::Label* dflab = Gtk::manage( new Gtk::Label (M("PREFERENCES_DATEFORMAT")+":", Gtk::ALIGN_LEFT));
|
||||
dateformat = Gtk::manage( new Gtk::Entry () );
|
||||
dateformat->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT"));
|
||||
dflab->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT"));
|
||||
hb6->pack_start (*dflab, Gtk::PACK_SHRINK, 0);
|
||||
hb6->pack_end (*dateformat, Gtk::PACK_SHRINK, 0);
|
||||
fdf->add (*hb6);
|
||||
|
||||
dfpfvb->pack_start (*fdf, true, true, 0);
|
||||
|
||||
//-----
|
||||
Gtk::Frame* pff = Gtk::manage( new Gtk::Frame (M("PREFERENCES_PANFACTORFRAME")) );
|
||||
|
||||
@@ -899,12 +889,21 @@ Gtk::Widget* Preferences::getFileBrowserPanel () {
|
||||
showBasicExif = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWBASICEXIF")) );
|
||||
showExpComp = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_SHOWEXPOSURECOMPENSATION")) );
|
||||
Gtk::VBox* vbro = Gtk::manage( new Gtk::VBox () );
|
||||
Gtk::HBox* hbro1 = Gtk::manage( new Gtk::HBox () );
|
||||
Gtk::HBox* hbro1 = Gtk::manage( new Gtk::HBox () );
|
||||
Gtk::HBox* hbro0 = Gtk::manage( new Gtk::HBox () );
|
||||
overlayedFileNames = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_OVERLAY_FILENAMES")) );
|
||||
ckbInternalThumbIfUntouched = Gtk::manage( new Gtk::CheckButton (M("PREFERENCES_INTERNALTHUMBIFUNTOUCHED")));
|
||||
|
||||
vbro->set_border_width (4);
|
||||
vbro->pack_start (*showDateTime, Gtk::PACK_SHRINK, 0);
|
||||
vbro->set_border_width (4);
|
||||
vbro->pack_start (*showDateTime, Gtk::PACK_SHRINK, 0);
|
||||
Gtk::Label* dflab = Gtk::manage( new Gtk::Label (M("PREFERENCES_DATEFORMAT")+":", Gtk::ALIGN_LEFT));
|
||||
dateformat = Gtk::manage( new Gtk::Entry () );
|
||||
dateformat->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT"));
|
||||
dflab->set_tooltip_markup (M("PREFERENCES_DATEFORMATHINT"));
|
||||
hbro0->pack_start (*dflab, Gtk::PACK_SHRINK, 4);
|
||||
hbro0->pack_start (*dateformat, Gtk::PACK_SHRINK, 0);
|
||||
|
||||
vbro->pack_start (*hbro0, Gtk::PACK_SHRINK, 0);
|
||||
hbro1->pack_start (*showBasicExif, Gtk::PACK_SHRINK, 0);
|
||||
hbro1->pack_start (*showExpComp, Gtk::PACK_SHRINK, 4);
|
||||
vbro->pack_start (*hbro1, Gtk::PACK_SHRINK, 0);
|
||||
@@ -1120,7 +1119,6 @@ void Preferences::storePreferences () {
|
||||
moptions.menuGroupFileOperations = ckbmenuGroupFileOperations->get_active();
|
||||
moptions.menuGroupProfileOperations = ckbmenuGroupProfileOperations->get_active();
|
||||
moptions.menuGroupExtProg = ckbmenuGroupExtProg->get_active();
|
||||
moptions.blinkClipped = blinkClipped->get_active ();
|
||||
moptions.highlightThreshold = (int)hlThresh->get_value ();
|
||||
moptions.shadowThreshold = (int)shThresh->get_value ();
|
||||
moptions.language = languages->get_active_text ();
|
||||
@@ -1220,7 +1218,6 @@ void Preferences::storePreferences () {
|
||||
|
||||
moptions.histogramPosition = ckbHistogramPositionLeft->get_active() ? 1 : 2;
|
||||
moptions.showProfileSelector = ckbShowProfileSelector->get_active();
|
||||
moptions.squareDetailWindow = ckbSquareDetailWindow->get_active();
|
||||
moptions.FileBrowserToolbarSingleRow = ckbFileBrowserToolbarSingleRow->get_active();
|
||||
moptions.hideTPVScrollbar = ckbHideTPVScrollbar->get_active();
|
||||
moptions.overwriteOutputFile = chOverwriteOutputFile->get_active ();
|
||||
@@ -1295,7 +1292,6 @@ void Preferences::fillPreferences () {
|
||||
ckbmenuGroupProfileOperations->set_active(moptions.menuGroupProfileOperations);
|
||||
ckbmenuGroupExtProg->set_active(moptions.menuGroupExtProg);
|
||||
|
||||
blinkClipped->set_active (moptions.blinkClipped);
|
||||
hlThresh->set_value (moptions.highlightThreshold);
|
||||
shThresh->set_value (moptions.shadowThreshold);
|
||||
|
||||
@@ -1356,7 +1352,6 @@ void Preferences::fillPreferences () {
|
||||
ckbHistogramPositionLeft->set_active(moptions.histogramPosition==1);
|
||||
// ckbHistogramWorking->set_active(moptions.histogramWorking==1);
|
||||
ckbShowProfileSelector->set_active(moptions.showProfileSelector);
|
||||
ckbSquareDetailWindow->set_active(moptions.squareDetailWindow);
|
||||
ckbFileBrowserToolbarSingleRow->set_active(moptions.FileBrowserToolbarSingleRow);
|
||||
ckbHideTPVScrollbar->set_active(moptions.hideTPVScrollbar);
|
||||
ckbUseIconNoText->set_active(moptions.UseIconNoText);
|
||||
|
||||
@@ -85,7 +85,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener {
|
||||
//Gtk::CheckButton* cbAutocielab;
|
||||
Gtk::CheckButton* cbciecamfloat;
|
||||
|
||||
Gtk::CheckButton* blinkClipped;
|
||||
Gtk::SpinButton* hlThresh;
|
||||
Gtk::SpinButton* shThresh;
|
||||
|
||||
@@ -149,7 +148,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener {
|
||||
Gtk::CheckButton* ckbShowProfileSelector;
|
||||
Gtk::CheckButton* ckbFileBrowserToolbarSingleRow;
|
||||
Gtk::CheckButton* ckbHideTPVScrollbar;
|
||||
Gtk::CheckButton* ckbSquareDetailWindow;
|
||||
Gtk::CheckButton* ckbUseIconNoText;
|
||||
|
||||
Glib::ustring storedValueRaw;
|
||||
|
||||
Reference in New Issue
Block a user