LINUX.ORG.RU

Сообщения Ower

 

Firefox: права для загружаемых файлов

После последнего обновления Firefox стал делать всем загружаемым файлам chmod 600.

Кто-нибудь знает как это изменить? У меня rtorrent автоматом подхватывал торренты из загрузок юзера, а теперь приходиться делать торрентам вручную chmod и touch.

И еще, зачем он делает chmod 600? Это же идиотизм.

ubuntu 13.04. firefox 24.0

 ,

Ower
()

QItemDelegate sizeHint для режима редактирования

Нужно запихнуть в таблицу комбо боксы, которые появляются при редактировании ячейки. Нужно, чтобы ширина столбцов автоматически подстраивалась под размер данных для каждого режима.

Делаю делегат для таблицы. Получилось весьма костыльно, но даже так не получилось...

sizeHint при появлении и при закрытии редактора не вызывается. Вызывается, если изменить размеры окна программы(таблицы).

Добавил сигнал layoutChanged, но соединение его с layoutChanged модели ничего не дает. Есть идеи куда его можно присоеденить?

Как вообще правильно реализовывать itemdelegate для этой задачи?

Есть вообще шаряшие в qt и model/view programming люди?

#include <QApplication>

#include <QTableView>
#include <QHeaderView>
#include <QStyledItemDelegate>
#include <QComboBox>
#include <QMap>
#include <QStandardItemModel>

class ItemDelegate : public QStyledItemDelegate
{
    Q_OBJECT
  public:
    explicit ItemDelegate(QObject* parent = 0) : QStyledItemDelegate(parent)
    {}

    QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& /*option*/, const QModelIndex& index) const
    {
      QComboBox* editor = new QComboBox(parent);
      editor->setSizeAdjustPolicy(QComboBox::AdjustToContents);
      editor->addItems(QStringList() << "QComboBox item 11111111111"  << "QComboBox item 2");

      m_sizeHint[index] = editor->sizeHint();
      m_isEditing[index] = true;

      emit layoutChanged();

      return editor;
    }

    void setModelData(QWidget* /*editor*/, QAbstractItemModel* /*model*/, const QModelIndex& index) const
    {
      m_isEditing[index] = false;

      emit layoutChanged();
    }

    virtual QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index) const
    {
      return m_isEditing[index] ? m_sizeHint[index] : QStyledItemDelegate::sizeHint(option, index);
    }

  signals:
    void layoutChanged() const;

  private:
    mutable QMap<QModelIndex, QSize> m_sizeHint;
    mutable QMap<QModelIndex, bool> m_isEditing;
};

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  ItemDelegate* delegate = new ItemDelegate;
  QStandardItemModel model(2, 2);
  model.setData(model.index(0, 0), "1");
  model.setData(model.index(0, 1), "2");
  model.setData(model.index(1, 0), "3");
  model.setData(model.index(1, 1), "4");

  // модели пофиг
  QObject::connect(delegate, SIGNAL(layoutChanged()), &model, SIGNAL(layoutChanged()));

  QTableView* table = new QTableView;
  table->resize(600, 400);

  table->setModel(&model);
  table->setItemDelegate(delegate);

  table->horizontalHeader()->setResizeMode(0, QHeaderView::ResizeToContents);
  table->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);

  table->show();

  return a.exec();
}

#include "main.moc"

Ower
()

Проблема использования chmod после setfacl

Есть одно очень глупое приложение, которое создает файлы и делает им chmod 600.

Задача: с помощью setfacl разрешить чтение из этих файлов двум пользователям.

Предпологаемое решение:

setfacl -m d:u:user1:r-- dir_with_files
setfacl -m d:u:user2:r-- dir_with_files

Проблема:

root:/tmp# touch test
root:/tmp# getfacl test
# file: test
# owner: root
# group: root
user::rw-
group::r--
other::r--

root:/tmp# setfacl -m u:user:rwx test
root:/tmp# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:user:rwx
group::r--
mask::rwx
other::r--

root:/tmp# chmod g= test
root:/tmp# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:user:rwx                   #effective:---
group::r--                      #effective:---
mask::---
other::r--


mask строго зависит от прав группы выставляемых через chmod. Почему? Зачем?

Как с этим жить?

Ower
()

Лейблы поверх окна Qt/Xlib

Есть многооконное приложение(исходники недоступны) поверх каждого окна которого необходимо выводить некоторую информацию. Информация выводится с помощью отдельной программы на Qt и отображается в QLabel, все лейблы должны быть обязательно всегда сверху своего окна.

Сейчас лейблам просто задается свойство всегда сверху, однако при этом возникает неудобство, т.к. лейблы также накладываются на другие окна приложения(при перекрытии окон) и находятся сверху всех остальных окон.

Соответственно хотелось бы найти способ отображения лейблов всегда сверху только для заданного окна.

Ower
()

RSS подписка на новые темы