1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Merge branch 'pr2343'

This commit is contained in:
tux3 2015-10-23 15:20:58 +02:00
commit 1f61534841
5 changed files with 74 additions and 64 deletions

View File

@ -289,6 +289,12 @@ void Settings::loadPersonnal(Profile* profile)
SettingsSerializer ps(filePath, profile->getPassword()); SettingsSerializer ps(filePath, profile->getPassword());
ps.load(); ps.load();
friendLst.clear(); friendLst.clear();
ps.beginGroup("Privacy");
typingNotification = ps.value("typingNotification", true).toBool();
enableLogging = ps.value("enableLogging", true).toBool();
ps.endGroup();
ps.beginGroup("Friends"); ps.beginGroup("Friends");
int size = ps.beginReadArray("Friend"); int size = ps.beginReadArray("Friend");
friendLst.reserve(size); friendLst.reserve(size);
@ -327,11 +333,6 @@ void Settings::loadPersonnal(Profile* profile)
} }
ps.endArray(); ps.endArray();
ps.endGroup(); ps.endGroup();
ps.beginGroup("Privacy");
typingNotification = ps.value("typingNotification", true).toBool();
enableLogging = ps.value("enableLogging", true).toBool();
ps.endGroup();
} }
void Settings::saveGlobal() void Settings::saveGlobal()

View File

@ -1608,7 +1608,7 @@ get_prop (GDBusConnection *conn,
else if (!g_strcmp0 (property, "ToolTip")) else if (!g_strcmp0 (property, "ToolTip"))
{ {
GVariant *variant; GVariant *variant;
GVariantBuilder *builder; GVariant *pixmap;
if (!priv->icon[STATUS_NOTIFIER_TOOLTIP_ICON].has_pixbuf) if (!priv->icon[STATUS_NOTIFIER_TOOLTIP_ICON].has_pixbuf)
{ {
@ -1621,13 +1621,13 @@ get_prop (GDBusConnection *conn,
return variant; return variant;
} }
builder = get_icon_pixmap (sn, STATUS_NOTIFIER_TOOLTIP_ICON); pixmap = get_icon_pixmap (sn, STATUS_NOTIFIER_TOOLTIP_ICON);
variant = g_variant_new ("(sa(iiay)ss)", variant = g_variant_new ("(sa(iiay)ss)",
"", "",
builder, pixmap,
(priv->tooltip_title) ? priv->tooltip_title : "", (priv->tooltip_title) ? priv->tooltip_title : "",
(priv->tooltip_body) ? priv->tooltip_body : ""); (priv->tooltip_body) ? priv->tooltip_body : "");
g_variant_builder_unref (builder); g_variant_unref (pixmap);
return variant; return variant;
} }

View File

@ -226,8 +226,11 @@ QVector<QPair<QString, QString>> CameraDevice::getRawDeviceListGeneric()
{ {
av_dict_free(&tmp); av_dict_free(&tmp);
avformat_free_context(s); avformat_free_context(s);
return devices;
} }
avdevice_list_devices(s, &devlist); avdevice_list_devices(s, &devlist);
av_dict_free(&tmp);
avformat_free_context(s);
if (!devlist) if (!devlist)
{ {
qWarning() << "avdevice_list_devices failed"; qWarning() << "avdevice_list_devices failed";

View File

@ -79,7 +79,7 @@ ProfileForm::ProfileForm(QWidget *parent) :
toxId->setToolTip(bodyUI->toxId->toolTip()); toxId->setToolTip(bodyUI->toxId->toolTip());
QVBoxLayout *toxIdGroup = qobject_cast<QVBoxLayout*>(bodyUI->toxGroup->layout()); QVBoxLayout *toxIdGroup = qobject_cast<QVBoxLayout*>(bodyUI->toxGroup->layout());
toxIdGroup->replaceWidget(bodyUI->toxId, toxId); delete toxIdGroup->replaceWidget(bodyUI->toxId, toxId); // Original toxId is in heap, delete it
bodyUI->toxId->hide(); bodyUI->toxId->hide();
bodyUI->qrLabel->setWordWrap(true); bodyUI->qrLabel->setWordWrap(true);

View File

@ -65,18 +65,12 @@ SystemTrayIcon::SystemTrayIcon()
qDebug() << "Using GTK backend"; qDebug() << "Using GTK backend";
backendType = SystrayBackendType::GTK; backendType = SystrayBackendType::GTK;
gtk_init(nullptr, nullptr); gtk_init(nullptr, nullptr);
void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image) // No ':' needed in resource path!
{ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_resource("/img/icon.png", NULL);
delete reinterpret_cast<QImage*>(image);
};
QImage* image = new QImage(":/img/icon.png");
if (image->format() != QImage::Format_RGBA8888_Premultiplied)
*image = image->convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image->bits(), GDK_COLORSPACE_RGB, image->hasAlphaChannel(),
8, image->width(), image->height(),
image->bytesPerLine(), callbackFreeImage, image);
gtkIcon = gtk_status_icon_new_from_pixbuf(pixbuf); gtkIcon = gtk_status_icon_new_from_pixbuf(pixbuf);
g_object_unref(pixbuf);
gtkMenu = gtk_menu_new(); gtkMenu = gtk_menu_new();
void (*callbackTrigger)(GtkStatusIcon*, gpointer) = void (*callbackTrigger)(GtkStatusIcon*, gpointer) =
@ -102,21 +96,13 @@ SystemTrayIcon::SystemTrayIcon()
backendType = SystrayBackendType::StatusNotifier; backendType = SystrayBackendType::StatusNotifier;
gtk_init(nullptr, nullptr); gtk_init(nullptr, nullptr);
snMenu = gtk_menu_new(); snMenu = gtk_menu_new();
void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image)
{
delete reinterpret_cast<QImage*>(image);
};
QImage image(":/img/icon.png");
if (image.format() != QImage::Format_RGBA8888_Premultiplied)
image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image.bits(), GDK_COLORSPACE_RGB, image.hasAlphaChannel(),
8, image.width(), image.height(),
image.bytesPerLine(), callbackFreeImage, &image);
// No ':' needed in resource path!
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_resource("/img/icon.png", NULL);
statusNotifier = status_notifier_new_from_pixbuf("qtox", statusNotifier = status_notifier_new_from_pixbuf("qtox",
STATUS_NOTIFIER_CATEGORY_APPLICATION_STATUS, pixbuf); STATUS_NOTIFIER_CATEGORY_APPLICATION_STATUS, pixbuf);
status_notifier_register(statusNotifier); status_notifier_register(statusNotifier);
g_object_unref(pixbuf);
} }
#endif #endif
else if (desktop == "kde" else if (desktop == "kde"
@ -182,19 +168,24 @@ void SystemTrayIcon::setContextMenu(QMenu* menu)
else else
{ {
void (*callbackFreeImage)(guchar*, gpointer) = void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image) [](guchar*, gpointer image_bytes)
{ {
delete reinterpret_cast<QImage*>(image); free(reinterpret_cast<guchar*>(image_bytes));
}; };
QImage* image = new QImage(a->icon().pixmap(64, 64).toImage()); QImage image = a->icon().pixmap(64, 64).toImage();
if (image->format() != QImage::Format_RGBA8888_Premultiplied) if (image.format() != QImage::Format_RGBA8888_Premultiplied)
*image = image->convertToFormat(QImage::Format_RGBA8888_Premultiplied); image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image->bits(), GDK_COLORSPACE_RGB, image->hasAlphaChannel(), guchar* image_bytes = (guchar*)malloc(image.byteCount());
8, image->width(), image->height(), memcpy(image_bytes, image.bits(), image.byteCount());
image->bytesPerLine(), callbackFreeImage, image);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image_bytes, GDK_COLORSPACE_RGB, image.hasAlphaChannel(),
8, image.width(), image.height(), image.bytesPerLine(),
callbackFreeImage, image_bytes);
item = gtk_image_menu_item_new_with_label(aText.toStdString().c_str()); item = gtk_image_menu_item_new_with_label(aText.toStdString().c_str());
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_pixbuf(pixbuf)); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_pixbuf(pixbuf));
gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item),TRUE); gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item),TRUE);
g_object_unref(pixbuf);
} }
gtk_menu_shell_append(GTK_MENU_SHELL(snMenu), item); gtk_menu_shell_append(GTK_MENU_SHELL(snMenu), item);
void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a) void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a)
@ -227,19 +218,24 @@ void SystemTrayIcon::setContextMenu(QMenu* menu)
else else
{ {
void (*callbackFreeImage)(guchar*, gpointer) = void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image) [](guchar*, gpointer image_bytes)
{ {
delete reinterpret_cast<QImage*>(image); free(reinterpret_cast<guchar*>(image_bytes));
}; };
QImage* image = new QImage(a->icon().pixmap(64, 64).toImage()); QImage image = a->icon().pixmap(64, 64).toImage();
if (image->format() != QImage::Format_RGBA8888_Premultiplied) if (image.format() != QImage::Format_RGBA8888_Premultiplied)
*image = image->convertToFormat(QImage::Format_RGBA8888_Premultiplied); image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image->bits(), GDK_COLORSPACE_RGB, image->hasAlphaChannel(), guchar* image_bytes = (guchar*)malloc(image.byteCount());
8, image->width(), image->height(), memcpy(image_bytes, image.bits(), image.byteCount());
image->bytesPerLine(), callbackFreeImage, image);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image_bytes, GDK_COLORSPACE_RGB, image.hasAlphaChannel(),
8, image.width(), image.height(), image.bytesPerLine(),
callbackFreeImage, image_bytes);
item = gtk_image_menu_item_new_with_label(aText.toStdString().c_str()); item = gtk_image_menu_item_new_with_label(aText.toStdString().c_str());
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_pixbuf(pixbuf)); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_pixbuf(pixbuf));
gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item),TRUE); gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item),TRUE);
g_object_unref(pixbuf);
} }
gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), item); gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), item);
void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a) void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a)
@ -360,34 +356,44 @@ void SystemTrayIcon::setIcon(QIcon &icon)
else if (backendType == SystrayBackendType::StatusNotifier) else if (backendType == SystrayBackendType::StatusNotifier)
{ {
void (*callbackFreeImage)(guchar*, gpointer) = void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image) [](guchar*, gpointer image_bytes)
{ {
delete reinterpret_cast<QImage*>(image); free(reinterpret_cast<guchar*>(image_bytes));
}; };
QImage* image = new QImage(icon.pixmap(64, 64).toImage()); QImage image = icon.pixmap(64, 64).toImage();
if (image->format() != QImage::Format_RGBA8888_Premultiplied) if (image.format() != QImage::Format_RGBA8888_Premultiplied)
*image = image->convertToFormat(QImage::Format_RGBA8888_Premultiplied); image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image->bits(), GDK_COLORSPACE_RGB, image->hasAlphaChannel(), guchar* image_bytes = (guchar*)malloc(image.byteCount());
8, image->width(), image->height(), memcpy(image_bytes, image.bits(), image.byteCount());
image->bytesPerLine(), callbackFreeImage, image);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image_bytes, GDK_COLORSPACE_RGB, image.hasAlphaChannel(),
8, image.width(), image.height(), image.bytesPerLine(),
callbackFreeImage, image_bytes);
status_notifier_set_from_pixbuf(statusNotifier, STATUS_NOTIFIER_ICON, pixbuf); status_notifier_set_from_pixbuf(statusNotifier, STATUS_NOTIFIER_ICON, pixbuf);
g_object_unref(pixbuf);
} }
#endif #endif
#ifdef ENABLE_SYSTRAY_GTK_BACKEND #ifdef ENABLE_SYSTRAY_GTK_BACKEND
else if (backendType == SystrayBackendType::GTK) else if (backendType == SystrayBackendType::GTK)
{ {
void (*callbackFreeImage)(guchar*, gpointer) = void (*callbackFreeImage)(guchar*, gpointer) =
[](guchar*, gpointer image) [](guchar*, gpointer image_bytes)
{ {
delete reinterpret_cast<QImage*>(image); free(reinterpret_cast<guchar*>(image_bytes));
}; };
QImage* image = new QImage(icon.pixmap(64, 64).toImage()); QImage image = icon.pixmap(64, 64).toImage();
if (image->format() != QImage::Format_RGBA8888_Premultiplied) if (image.format() != QImage::Format_RGBA8888_Premultiplied)
*image = image->convertToFormat(QImage::Format_RGBA8888_Premultiplied); image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image->bits(), GDK_COLORSPACE_RGB, image->hasAlphaChannel(), guchar* image_bytes = (guchar*)malloc(image.byteCount());
8, image->width(), image->height(), memcpy(image_bytes, image.bits(), image.byteCount());
image->bytesPerLine(), callbackFreeImage, image);
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data(image_bytes, GDK_COLORSPACE_RGB, image.hasAlphaChannel(),
8, image.width(), image.height(), image.bytesPerLine(),
callbackFreeImage, image_bytes);
gtk_status_icon_set_from_pixbuf(gtkIcon, pixbuf); gtk_status_icon_set_from_pixbuf(gtkIcon, pixbuf);
g_object_unref(pixbuf);
} }
#endif #endif
#ifdef ENABLE_SYSTRAY_UNITY_BACKEND #ifdef ENABLE_SYSTRAY_UNITY_BACKEND