Commit 047a66d6 authored by Sébastien Blin's avatar Sébastien Blin Committed by Philippe Gorley

medias: link to new media API

Change-Id: I7b8e5a2d08ecbdcb9baba84e6df811c1012299db
Reviewed-by: Philippe Gorley's avatarPhilippe Gorley <philippe.gorley@savoirfairelinux.com>
parent 39c74549
......@@ -102,6 +102,8 @@ struct _AccountCreationWizardPrivate
GtkWidget *error_view;
GtkWidget *button_error_view_ok;
lrc::api::AVModel* avModel_;
};
G_DEFINE_TYPE_WITH_PRIVATE(AccountCreationWizard, account_creation_wizard, GTK_TYPE_SCROLLED_WINDOW);
......@@ -591,10 +593,13 @@ build_creation_wizard_view(AccountCreationWizard *view, gboolean show_cancel_but
}
GtkWidget *
account_creation_wizard_new(bool show_cancel_button)
account_creation_wizard_new(bool show_cancel_button, lrc::api::AVModel& avModel)
{
gpointer view = g_object_new(ACCOUNT_CREATION_WIZARD_TYPE, NULL);
auto* priv = ACCOUNT_CREATION_WIZARD_GET_PRIVATE(view);
priv->avModel_ = &avModel;
build_creation_wizard_view(ACCOUNT_CREATION_WIZARD(view), show_cancel_button);
return (GtkWidget *)view;
}
......@@ -615,7 +620,7 @@ account_creation_wizard_show_preview(AccountCreationWizard *win, gboolean show_p
each time the profile is made visible / hidden. While not the most elegant solution, this
allows us to run the preview if and only if it is displayed, and always stop it when hidden. */
if (show_preview && !priv->avatar_manipulation) {
priv->avatar_manipulation = avatar_manipulation_new_from_wizard();
priv->avatar_manipulation = avatar_manipulation_new_from_wizard(priv->avModel_);
gtk_box_pack_start(GTK_BOX(priv->box_avatarselection), priv->avatar_manipulation, true, true, 0);
gtk_stack_set_visible_child(GTK_STACK(priv->stack_account_creation), priv->account_creation);
} else if (priv->avatar_manipulation) {
......
......@@ -27,6 +27,14 @@
#include "accountinfopointer.h"
namespace lrc
{
namespace api
{
class AVModel;
}
}
G_BEGIN_DECLS
#define ACCOUNT_CREATION_WIZARD_TYPE (account_creation_wizard_get_type ())
......@@ -39,7 +47,7 @@ typedef struct _AccountCreationWizard AccountCreationWizard;
typedef struct _AccountCreationWizardClass AccountCreationWizardClass;
GType account_creation_wizard_get_type (void) G_GNUC_CONST;
GtkWidget *account_creation_wizard_new (bool cancel_button);
GtkWidget *account_creation_wizard_new (bool cancel_button, lrc::api::AVModel& avModel);
void account_creation_wizard_show_preview (AccountCreationWizard *win, gboolean show_preview = TRUE);
void account_creation_wizard_cancel (AccountCreationWizard *win);
......
......@@ -22,12 +22,10 @@
/* LRC */
#include <api/newaccountmodel.h>
#include <api/avmodel.h>
#include <globalinstances.h>
#include <person.h>
#include <profile.h>
#include <video/configurationproxy.h>
#include <video/previewmanager.h>
#include <video/devicemodel.h>
/* client */
#include "native/pixbufmanipulator.h"
......@@ -94,6 +92,8 @@ struct _AvatarManipulationPrivate
gboolean video_started_by_avatar_manipulation;
GtkWidget *crop_area;
lrc::api::AVModel* avModel_;
};
G_DEFINE_TYPE_WITH_PRIVATE(AvatarManipulation, avatar_manipulation, GTK_TYPE_BOX);
......@@ -118,7 +118,7 @@ avatar_manipulation_dispose(GObject *object)
/* make sure we stop the preview and the video widget */
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
priv->avModel_->stopPreview();
if (priv->video_widget) {
gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
......@@ -134,13 +134,14 @@ avatar_manipulation_finalize(GObject *object)
}
GtkWidget*
avatar_manipulation_new(AccountInfoPointer const & accountInfo)
avatar_manipulation_new(AccountInfoPointer const & accountInfo, lrc::api::AVModel* avModel)
{
// a profile must exist
gpointer view = g_object_new(AVATAR_MANIPULATION_TYPE, NULL);
auto* priv = AVATAR_MANIPULATION_GET_PRIVATE(view);
priv->accountInfo_ = &accountInfo;
priv->avModel_ = avModel;
set_state(AVATAR_MANIPULATION(view), AVATAR_MANIPULATION_STATE_CURRENT);
......@@ -148,13 +149,14 @@ avatar_manipulation_new(AccountInfoPointer const & accountInfo)
}
GtkWidget*
avatar_manipulation_new_from_wizard(void)
avatar_manipulation_new_from_wizard(lrc::api::AVModel* avModel)
{
// a profile must exist
gpointer view = g_object_new(AVATAR_MANIPULATION_TYPE, NULL);
auto* priv = AVATAR_MANIPULATION_GET_PRIVATE(view);
priv->accountInfo_ = nullptr;
priv->avModel_ = avModel;
set_state(AVATAR_MANIPULATION(view), AVATAR_MANIPULATION_STATE_CURRENT);
......@@ -247,7 +249,7 @@ set_state(AvatarManipulation *self, AvatarManipulationState state)
gtk_stack_set_visible_child_name(GTK_STACK(priv->stack_views), "page_avatar");
/* available actions: start camera (if available) or choose image */
if (Video::DeviceModel::instance().rowCount() > 0) {
if (priv->avModel_->getDevices().size() > 0) {
// TODO: update if a video device gets inserted while in this state
gtk_widget_set_visible(priv->button_start_camera, true);
}
......@@ -257,7 +259,7 @@ set_state(AvatarManipulation *self, AvatarManipulationState state)
/* make sure video widget and camera is not running */
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
priv->avModel_->stopPreview();
if (priv->video_widget) {
gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
......@@ -276,16 +278,23 @@ set_state(AvatarManipulation *self, AvatarManipulationState state)
gtk_stack_set_visible_child_name(GTK_STACK(priv->stack_views), "page_photobooth");
/* local renderer, but set as "remote" so that it takes up the whole screen */
video_widget_push_new_renderer(VIDEO_WIDGET(priv->video_widget),
Video::PreviewManager::instance().previewRenderer(),
VIDEO_RENDERER_REMOTE);
if (!Video::PreviewManager::instance().isPreviewing()) {
priv->video_started_by_avatar_manipulation = TRUE;
Video::PreviewManager::instance().startPreview();
} else {
priv->video_started_by_avatar_manipulation = FALSE;
// local renderer, but set as "remote" so that it takes up the whole screen
try {
const lrc::api::video::Renderer* previewRenderer =
&priv->avModel_->getRenderer(
lrc::api::video::PREVIEW_RENDERER_ID);
video_widget_add_new_renderer(VIDEO_WIDGET(priv->video_widget),
priv->avModel_,
previewRenderer, VIDEO_RENDERER_REMOTE);
if (!previewRenderer->isRendering()) {
priv->video_started_by_avatar_manipulation = TRUE;
priv->avModel_->startPreview();
} else {
priv->video_started_by_avatar_manipulation = FALSE;
}
} catch (const std::out_of_range& e) {
g_warning(e.what());
}
/* available actions: take snapshot, return*/
......@@ -298,7 +307,7 @@ set_state(AvatarManipulation *self, AvatarManipulationState state)
{
/* make sure video widget and camera is not running */
if (priv->video_started_by_avatar_manipulation)
Video::PreviewManager::instance().stopPreview();
priv->avModel_->stopPreview();
if (priv->video_widget) {
gtk_container_remove(GTK_CONTAINER(priv->frame_video), priv->video_widget);
priv->video_widget = NULL;
......
......@@ -26,6 +26,14 @@
#include "accountinfopointer.h"
namespace lrc
{
namespace api
{
class AVModel;
}
}
G_BEGIN_DECLS
#define AVATAR_MANIPULATION_TYPE (avatar_manipulation_get_type ())
......@@ -58,10 +66,10 @@ typedef enum
GType avatar_manipulation_get_type (void) G_GNUC_CONST;
GtkWidget *avatar_manipulation_new (AccountInfoPointer const & accountInfo);
GtkWidget *avatar_manipulation_new (AccountInfoPointer const & accountInfo, lrc::api::AVModel* avModel);
/* used from the account creation wizard */
GtkWidget *avatar_manipulation_new_from_wizard(void);
GtkWidget *avatar_manipulation_new_from_wizard(lrc::api::AVModel* avModel);
void avatar_manipulation_wizard_completed(AvatarManipulation *);
gchar* avatar_manipulation_get_temporary (AvatarManipulation *view);
......
......@@ -25,6 +25,7 @@
#include <glib/gi18n.h>
// Lrc
#include <api/avmodel.h>
#include <api/conversationmodel.h>
#include <api/contact.h>
#include <api/contactmodel.h>
......@@ -198,7 +199,8 @@ public:
void init();
void setup(WebKitChatContainer* chat_widget,
AccountInfoPointer const & account_info,
lrc::api::conversation::Info* conversation);
lrc::api::conversation::Info* conversation,
lrc::api::AVModel& avModel);
void add_transfer_contact(const std::string& uri);
void insertControls();
......@@ -209,10 +211,10 @@ public:
lrc::api::conversation::Info* conversation = nullptr;
AccountInfoPointer const *accountInfo = nullptr;
lrc::api::AVModel* avModel_;
QMetaObject::Connection state_change_connection;
QMetaObject::Connection local_renderer_connection;
QMetaObject::Connection remote_renderer_connection;
QMetaObject::Connection renderer_connection;
QMetaObject::Connection new_message_connection;
QMetaObject::Connection smartinfo_refresh_connection;
......@@ -671,8 +673,7 @@ CppImpl::CppImpl(CurrentCallView& widget)
CppImpl::~CppImpl()
{
QObject::disconnect(state_change_connection);
QObject::disconnect(local_renderer_connection);
QObject::disconnect(remote_renderer_connection);
QObject::disconnect(renderer_connection);
QObject::disconnect(smartinfo_refresh_connection);
QObject::disconnect(new_message_connection);
g_clear_object(&widgets->settings);
......@@ -719,11 +720,13 @@ CppImpl::init()
void
CppImpl::setup(WebKitChatContainer* chat_widget,
AccountInfoPointer const & account_info,
lrc::api::conversation::Info* conv_info)
lrc::api::conversation::Info* conv_info,
lrc::api::AVModel& avModel)
{
widgets->webkit_chat_container = GTK_WIDGET(chat_widget);
conversation = conv_info;
accountInfo = &account_info;
avModel_ = &avModel;
setCallInfo();
if ((*accountInfo)->profileInfo.type == lrc::api::profile::Type::RING)
......@@ -764,7 +767,6 @@ CppImpl::setCallInfo()
updateState();
updateDetails();
// NOTE/TODO we need to rewrite the video_widget file to use the new LRC.
g_signal_connect(widgets->video_widget, "button-press-event",
G_CALLBACK(video_widget_on_button_press_in_screen_event), nullptr);
......@@ -772,26 +774,58 @@ CppImpl::setCallInfo()
auto callToRender = conversation->callId;
if (!conversation->confId.empty())
callToRender = conversation->confId;
video_widget_push_new_renderer(VIDEO_WIDGET(widgets->video_widget),
(*accountInfo)->callModel->getRenderer(callToRender),
VIDEO_RENDERER_REMOTE);
// local renderer
if (Video::PreviewManager::instance().isPreviewing())
video_widget_push_new_renderer(VIDEO_WIDGET(widgets->video_widget),
Video::PreviewManager::instance().previewRenderer(),
VIDEO_RENDERER_LOCAL);
try {
// local renderer
const lrc::api::video::Renderer* previewRenderer =
&avModel_->getRenderer(
lrc::api::video::PREVIEW_RENDERER_ID);
if (previewRenderer->isRendering())
video_widget_add_new_renderer(VIDEO_WIDGET(widgets->video_widget),
avModel_, previewRenderer, VIDEO_RENDERER_LOCAL);
const lrc::api::video::Renderer* vRenderer =
&avModel_->getRenderer(
callToRender);
video_widget_add_new_renderer(VIDEO_WIDGET(widgets->video_widget),
avModel_, vRenderer, VIDEO_RENDERER_REMOTE);
} catch (...) {
// The renderer doesn't exist for now. Ignore
}
// callback for local renderer
local_renderer_connection = QObject::connect(
&Video::PreviewManager::instance(),
&Video::PreviewManager::previewStarted,
[this] (Video::Renderer* renderer) {
video_widget_push_new_renderer(VIDEO_WIDGET(widgets->video_widget),
renderer,
VIDEO_RENDERER_LOCAL);
}
);
renderer_connection = QObject::connect(
&*avModel_,
&lrc::api::AVModel::rendererStarted,
[=](const std::string& id) {
if (id == lrc::api::video::PREVIEW_RENDERER_ID) {
try {
// local renderer
const lrc::api::video::Renderer* previewRenderer =
&avModel_->getRenderer(lrc::api::video::PREVIEW_RENDERER_ID);
if (previewRenderer->isRendering()) {
video_widget_add_new_renderer(VIDEO_WIDGET(widgets->video_widget),
avModel_, previewRenderer, VIDEO_RENDERER_LOCAL);
}
} catch (...) {
g_warning("Preview renderer is not accessible! This should not happen");
}
} else if (id == conversation->callId) {
try {
const lrc::api::video::Renderer* vRenderer =
&avModel_->getRenderer(
callToRender);
video_widget_add_new_renderer(VIDEO_WIDGET(widgets->video_widget),
avModel_, vRenderer, VIDEO_RENDERER_REMOTE);
} catch (...) {
g_warning("Remote renderer is not accessible! This should not happen");
}
}
});
smartinfo_refresh_connection = QObject::connect(
&SmartInfoHub::instance(),
......@@ -799,17 +833,6 @@ CppImpl::setCallInfo()
[this] { updateSmartInfo(); }
);
remote_renderer_connection = QObject::connect(
&*(*accountInfo)->callModel,
&lrc::api::NewCallModel::remotePreviewStarted,
[this] (const std::string& callId, Video::Renderer* renderer) {
if (conversation->callId == callId) {
video_widget_push_new_renderer(VIDEO_WIDGET(widgets->video_widget),
renderer,
VIDEO_RENDERER_REMOTE);
}
});
state_change_connection = QObject::connect(
&*(*accountInfo)->callModel,
&lrc::api::NewCallModel::callStatusChanged,
......@@ -1235,11 +1258,12 @@ current_call_view_class_init(CurrentCallViewClass *klass)
GtkWidget *
current_call_view_new(WebKitChatContainer* chat_widget,
AccountInfoPointer const & accountInfo,
lrc::api::conversation::Info* conversation)
lrc::api::conversation::Info* conversation,
lrc::api::AVModel& avModel)
{
auto* self = g_object_new(CURRENT_CALL_VIEW_TYPE, NULL);
auto* priv = CURRENT_CALL_VIEW_GET_PRIVATE(self);
priv->cpp->setup(chat_widget, accountInfo, conversation);
priv->cpp->setup(chat_widget, accountInfo, conversation, avModel);
return GTK_WIDGET(self);
}
......@@ -30,6 +30,7 @@ namespace lrc
{
namespace api
{
class AVModel;
namespace conversation
{
struct Info;
......@@ -52,7 +53,8 @@ typedef struct _CurrentCallViewClass CurrentCallViewClass;
GType current_call_view_get_type (void) G_GNUC_CONST;
GtkWidget *current_call_view_new (WebKitChatContainer* view,
AccountInfoPointer const & accountInfo,
lrc::api::conversation::Info* conversation);
lrc::api::conversation::Info* conversation,
lrc::api::AVModel& avModel);
lrc::api::conversation::Info current_call_view_get_conversation(CurrentCallView*);
GtkWidget *current_call_view_get_chat_view(CurrentCallView*);
......
This diff is collapsed.
/*
* Copyright (C) 2015-2018 Savoir-faire Linux Inc.
* Author: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
......@@ -22,6 +23,14 @@
#include <gtk/gtk.h>
namespace lrc
{
namespace api
{
class AVModel;
}
}
G_BEGIN_DECLS
#define MEDIA_SETTINGS_VIEW_TYPE (media_settings_view_get_type ())
......@@ -34,7 +43,7 @@ typedef struct _MediaSettingsView MediaSettingsView;
typedef struct _MediaSettingsViewClass MediaSettingsViewClass;
GType media_settings_view_get_type (void) G_GNUC_CONST;
GtkWidget *media_settings_view_new (void);
GtkWidget *media_settings_view_new (lrc::api::AVModel& avModel);
void media_settings_view_show_preview (MediaSettingsView *self, gboolean show_preview);
G_END_DECLS
......
......@@ -200,6 +200,8 @@ struct _NewAccountSettingsViewPrivate
QMetaObject::Connection device_removed_connection;
QMetaObject::Connection banned_status_changed_connection;
QMetaObject::Connection export_on_ring_ended;
lrc::api::AVModel* avModel_;
};
G_DEFINE_TYPE_WITH_PRIVATE(NewAccountSettingsView, new_account_settings_view, GTK_TYPE_SCROLLED_WINDOW);
......@@ -2195,7 +2197,7 @@ new_account_settings_view_save_account(NewAccountSettingsView *view)
}
GtkWidget*
new_account_settings_view_new(AccountInfoPointer const & accountInfo)
new_account_settings_view_new(AccountInfoPointer const & accountInfo, lrc::api::AVModel& avModel)
{
gpointer view = g_object_new(NEW_ACCOUNT_SETTINGS_VIEW_TYPE, NULL);
auto* priv = NEW_ACCOUNT_SETTINGS_VIEW_GET_PRIVATE(view);
......@@ -2203,6 +2205,7 @@ new_account_settings_view_new(AccountInfoPointer const & accountInfo)
if (*priv->accountInfo_) {
build_settings_view(NEW_ACCOUNT_SETTINGS_VIEW(view));
}
priv->avModel_ = &avModel;
return reinterpret_cast<GtkWidget*>(view);
}
......@@ -2219,7 +2222,7 @@ new_account_settings_view_show(NewAccountSettingsView *self, gboolean show_profi
}
if (show_profile) {
/* avatar manipulation widget */
priv->avatarmanipulation = avatar_manipulation_new(*priv->accountInfo_);
priv->avatarmanipulation = avatar_manipulation_new(*priv->accountInfo_, priv->avModel_);
gtk_widget_set_halign(priv->avatar_box, GtkAlign::GTK_ALIGN_CENTER);
gtk_box_pack_start(GTK_BOX(priv->avatar_box), priv->avatarmanipulation, true, true, 0);
gtk_widget_set_visible(priv->avatarmanipulation, true);
......
......@@ -27,6 +27,14 @@
#include "accountinfopointer.h"
namespace lrc
{
namespace api
{
class AVModel;
}
}
G_BEGIN_DECLS
#define NEW_ACCOUNT_SETTINGS_VIEW_TYPE (new_account_settings_view_get_type ())
......@@ -39,7 +47,7 @@ typedef struct _NewAccountSettingsView NewAccountSettingsView;
typedef struct _NewAccountSettingsViewClass NewAccountSettingsViewClass;
GType new_account_settings_view_get_type (void) G_GNUC_CONST;
GtkWidget *new_account_settings_view_new (AccountInfoPointer const & accountInfo);
GtkWidget *new_account_settings_view_new (AccountInfoPointer const & accountInfo, lrc::api::AVModel& avModel);
void new_account_settings_view_show (NewAccountSettingsView *view, gboolean show_profile);
void new_account_settings_view_update (NewAccountSettingsView *view, gboolean reset_view = true);
void new_account_settings_view_save_account (NewAccountSettingsView *view);
......
......@@ -29,6 +29,7 @@
// LRC
#include <accountmodel.h> // Old lrc but still used
#include <api/account.h>
#include <api/avmodel.h>
#include <api/contact.h>
#include <api/profile.h>
#include <api/contactmodel.h>
......@@ -895,6 +896,7 @@ update_download_folder(RingMainWindow* self)
void
CppImpl::init()
{
lrc_->getAVModel().deactivateOldVideoModels();
// Remember the tabs page number for easier selection later
smartviewPageNum = gtk_notebook_page_num(GTK_NOTEBOOK(widgets->notebook_contacts),
widgets->scrolled_window_smartview);
......@@ -997,12 +999,12 @@ CppImpl::init()
gtk_stack_add_named(GTK_STACK(widgets->stack_main_view), widgets->vbox_call_view,
CALL_VIEW_NAME);
widgets->media_settings_view = media_settings_view_new();
widgets->media_settings_view = media_settings_view_new(lrc_->getAVModel());
gtk_stack_add_named(GTK_STACK(widgets->stack_main_view), widgets->media_settings_view,
MEDIA_SETTINGS_VIEW_NAME);
if (not accountIds.empty()) {
widgets->new_account_settings_view = new_account_settings_view_new(accountInfo_);
widgets->new_account_settings_view = new_account_settings_view_new(accountInfo_, lrc_->getAVModel());
gtk_stack_add_named(GTK_STACK(widgets->stack_main_view), widgets->new_account_settings_view,
NEW_ACCOUNT_SETTINGS_VIEW_NAME);
}
......@@ -1200,7 +1202,9 @@ CppImpl::displayCurrentCallView(lrc::api::conversation::Info conversation)
{
chatViewConversation_.reset(new lrc::api::conversation::Info(conversation));
auto* new_view = current_call_view_new(webkitChatContainer(),
accountInfo_, chatViewConversation_.get());
accountInfo_,
chatViewConversation_.get(),
lrc_->getAVModel());
try {
auto contactUri = chatViewConversation_->participants.front();
......@@ -1388,7 +1392,7 @@ void
CppImpl::enterAccountCreationWizard(bool showControls)
{
if (!widgets->account_creation_wizard) {
widgets->account_creation_wizard = account_creation_wizard_new(false);
widgets->account_creation_wizard = account_creation_wizard_new(false, lrc_->getAVModel());
g_object_add_weak_pointer(G_OBJECT(widgets->account_creation_wizard),
reinterpret_cast<gpointer*>(&widgets->account_creation_wizard));
g_signal_connect_swapped(widgets->account_creation_wizard, "account-creation-completed",
......@@ -1689,7 +1693,7 @@ CppImpl::slotAccountAddedFromLrc(const std::string& id)
if (!accountInfo_) {
updateLrc(id);
if (!gtk_stack_get_child_by_name(GTK_STACK(widgets->stack_main_view), NEW_ACCOUNT_SETTINGS_VIEW_NAME)) {
widgets->new_account_settings_view = new_account_settings_view_new(accountInfo_);
widgets->new_account_settings_view = new_account_settings_view_new(accountInfo_, lrc_->getAVModel());
gtk_stack_add_named(GTK_STACK(widgets->stack_main_view), widgets->new_account_settings_view,
NEW_ACCOUNT_SETTINGS_VIEW_NAME);
}
......
This diff is collapsed.
......@@ -22,8 +22,15 @@
#include <gtk/gtk.h>
#include <video/renderer.h>
#include <api/newvideo.h>
class Call;
namespace lrc
{
namespace api
{
class AVModel;
}
}
G_BEGIN_DECLS
......@@ -45,7 +52,7 @@ typedef enum {
/* Public interface */
GType video_widget_get_type (void) G_GNUC_CONST;
GtkWidget* video_widget_new (void);
void video_widget_push_new_renderer (VideoWidget *, Video::Renderer *, VideoRendererType);
void video_widget_add_new_renderer (VideoWidget*, lrc::api::AVModel* avModel, const lrc::api::video::Renderer*, VideoRendererType);
void video_widget_pause_rendering (VideoWidget *self, gboolean pause);
void video_widget_on_drag_data_received (GtkWidget *self,
GdkDragContext *context,
......@@ -57,7 +64,7 @@ void video_widget_on_drag_data_received (GtkWidget *self,
gpointer data);
gboolean video_widget_on_button_press_in_screen_event (VideoWidget *self,
GdkEventButton *event,
Call* call);
G_GNUC_UNUSED gpointer);
void video_widget_take_snapshot (VideoWidget *self);
GdkPixbuf* video_widget_get_snapshot (VideoWidget *self);
......
......@@ -82,7 +82,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_manager">
<object class="GtkComboBoxText" id="combobox_manager">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -93,7 +93,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_ringtone">
<object class="GtkComboBoxText" id="combobox_ringtone">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -104,7 +104,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_output">
<object class="GtkComboBoxText" id="combobox_output">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -115,7 +115,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_input">
<object class="GtkComboBoxText" id="combobox_input">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -192,7 +192,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_device">
<object class="GtkComboBoxText" id="combobox_device">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -203,7 +203,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_channel">
<object class="GtkComboBoxText" id="combobox_channel">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -214,7 +214,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_resolution">
<object class="GtkComboBoxText" id="combobox_resolution">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......@@ -225,7 +225,7 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="combobox_framerate">
<object class="GtkComboBoxText" id="combobox_framerate">
<property name="visible">True</property>
<property name="popup-fixed-width">False</property>
<property name="margin_left">10</property>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment