diff --git a/org.nickvision.tubeconverter.gnome/CMakeLists.txt b/org.nickvision.tubeconverter.gnome/CMakeLists.txt index 9891763be..2c9173760 100644 --- a/org.nickvision.tubeconverter.gnome/CMakeLists.txt +++ b/org.nickvision.tubeconverter.gnome/CMakeLists.txt @@ -80,4 +80,4 @@ if(NOT WIN32) else() message(WARNING "update-desktop-database not found, desktop database will not be updated") endif() -endif() \ No newline at end of file +endif() diff --git a/org.nickvision.tubeconverter.gnome/include/helpers/gtkhelpers.h b/org.nickvision.tubeconverter.gnome/include/helpers/gtkhelpers.h index e32f87983..f7b0db8fd 100644 --- a/org.nickvision.tubeconverter.gnome/include/helpers/gtkhelpers.h +++ b/org.nickvision.tubeconverter.gnome/include/helpers/gtkhelpers.h @@ -40,8 +40,9 @@ namespace Nickvision::TubeConverter::GNOME::Helpers::GtkHelpers * @param row The combo row * @param strs The strings to set * @param selected An option string that should be selected + * @param allowEllipse Whether or not to allow ellipses in the combo row */ - void setComboRowModel(AdwComboRow* row, const std::vector& strs, const std::string& selected = ""); + void setComboRowModel(AdwComboRow* row, const std::vector& strs, const std::string& selected = "", bool allowEllipse = true); } -#endif //GTKHELPERS_H \ No newline at end of file +#endif //GTKHELPERS_H diff --git a/org.nickvision.tubeconverter.gnome/src/helpers/gtkhelpers.cpp b/org.nickvision.tubeconverter.gnome/src/helpers/gtkhelpers.cpp index df33c1d79..b6543b81f 100644 --- a/org.nickvision.tubeconverter.gnome/src/helpers/gtkhelpers.cpp +++ b/org.nickvision.tubeconverter.gnome/src/helpers/gtkhelpers.cpp @@ -1,5 +1,4 @@ #include "helpers/gtkhelpers.h" -#include namespace Nickvision::TubeConverter::GNOME::Helpers { @@ -48,7 +47,7 @@ namespace Nickvision::TubeConverter::GNOME::Helpers gtk_application_set_accels_for_action(app, action, accels); } - void GtkHelpers::setComboRowModel(AdwComboRow* row, const std::vector& strs, const std::string& selected) + void GtkHelpers::setComboRowModel(AdwComboRow* row, const std::vector& strs, const std::string& selected, bool allowEllipse) { size_t selectedIndex{ 0 }; GtkStringList* list{ gtk_string_list_new(nullptr) }; @@ -61,7 +60,25 @@ namespace Nickvision::TubeConverter::GNOME::Helpers selectedIndex = i; } } + if(!allowEllipse) + { + GtkListItemFactory* factory{ gtk_signal_list_item_factory_new() }; + g_signal_connect(factory, "setup", G_CALLBACK(+[](GtkListItemFactory* factory, GtkListItem* item, gpointer data) + { + GtkLabel* lbl{ GTK_LABEL(gtk_label_new(nullptr)) }; + gtk_widget_set_halign(GTK_WIDGET(lbl), GTK_ALIGN_START); + gtk_label_set_ellipsize(lbl, PANGO_ELLIPSIZE_NONE); + gtk_list_item_set_child(item, GTK_WIDGET(lbl)); + }), nullptr); + g_signal_connect(factory, "bind", G_CALLBACK(+[](GtkListItemFactory* factory, GtkListItem* item, gpointer data) + { + GtkStringList* list{ GTK_STRING_LIST(data) }; + GtkLabel* lbl{ GTK_LABEL(gtk_list_item_get_child(item)) }; + gtk_label_set_label(lbl, gtk_string_list_get_string(list, gtk_list_item_get_position(item))); + }), list); + adw_combo_row_set_factory(row, factory); + } adw_combo_row_set_model(row, G_LIST_MODEL(list)); adw_combo_row_set_selected(row, selectedIndex); } -} \ No newline at end of file +} diff --git a/org.nickvision.tubeconverter.gnome/src/views/adddownloaddialog.cpp b/org.nickvision.tubeconverter.gnome/src/views/adddownloaddialog.cpp index 6378e7b99..dc3d81bb6 100644 --- a/org.nickvision.tubeconverter.gnome/src/views/adddownloaddialog.cpp +++ b/org.nickvision.tubeconverter.gnome/src/views/adddownloaddialog.cpp @@ -161,9 +161,9 @@ namespace Nickvision::TubeConverter::GNOME::Views adw_view_stack_set_visible_child_name(m_builder.get("viewStack"), "download-single"); GtkHelpers::setComboRowModel(m_builder.get("fileTypeSingleRow"), m_controller->getFileTypeStrings()); adw_combo_row_set_selected(m_builder.get("fileTypeSingleRow"), static_cast(m_controller->getPreviousDownloadOptions().getFileType())); - GtkHelpers::setComboRowModel(m_builder.get("videoFormatSingleRow"), m_controller->getVideoFormatStrings(&previous)); + GtkHelpers::setComboRowModel(m_builder.get("videoFormatSingleRow"), m_controller->getVideoFormatStrings(&previous), "", false); adw_combo_row_set_selected(m_builder.get("videoFormatSingleRow"), previous); - GtkHelpers::setComboRowModel(m_builder.get("audioFormatSingleRow"), m_controller->getAudioFormatStrings(&previous)); + GtkHelpers::setComboRowModel(m_builder.get("audioFormatSingleRow"), m_controller->getAudioFormatStrings(&previous), "", false); adw_combo_row_set_selected(m_builder.get("audioFormatSingleRow"), previous); adw_action_row_set_subtitle(m_builder.get("saveFolderSingleRow"), m_controller->getPreviousDownloadOptions().getSaveFolder().string().c_str()); gtk_editable_set_text(m_builder.get("filenameSingleRow"), m_controller->getMediaTitle(0).c_str());