Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
All conflicts seemed rather trivial, with some guidance from Saeed Mameed on the tc_ct.c one. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -35,6 +35,7 @@ KBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation)
|
||||
# The following turn off the warnings enabled by -Wextra
|
||||
KBUILD_CFLAGS += -Wno-missing-field-initializers
|
||||
KBUILD_CFLAGS += -Wno-sign-compare
|
||||
KBUILD_CFLAGS += -Wno-type-limits
|
||||
|
||||
KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1
|
||||
|
||||
@@ -66,6 +67,7 @@ KBUILD_CFLAGS += -Wshadow
|
||||
KBUILD_CFLAGS += $(call cc-option, -Wlogical-op)
|
||||
KBUILD_CFLAGS += -Wmissing-field-initializers
|
||||
KBUILD_CFLAGS += -Wsign-compare
|
||||
KBUILD_CFLAGS += -Wtype-limits
|
||||
KBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized)
|
||||
KBUILD_CFLAGS += $(call cc-option, -Wunused-macros)
|
||||
|
||||
|
@@ -212,6 +212,9 @@ $(foreach m, $(notdir $1), \
|
||||
$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
|
||||
endef
|
||||
|
||||
quiet_cmd_copy = COPY $@
|
||||
cmd_copy = cp $< $@
|
||||
|
||||
# Shipped files
|
||||
# ===========================================================================
|
||||
|
||||
@@ -259,6 +262,7 @@ quiet_cmd_gzip = GZIP $@
|
||||
# DTC
|
||||
# ---------------------------------------------------------------------------
|
||||
DTC ?= $(objtree)/scripts/dtc/dtc
|
||||
DTC_FLAGS += -Wno-interrupt_provider
|
||||
|
||||
# Disable noisy checks by default
|
||||
ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),)
|
||||
@@ -274,7 +278,8 @@ endif
|
||||
|
||||
ifneq ($(findstring 2,$(KBUILD_EXTRA_WARN)),)
|
||||
DTC_FLAGS += -Wnode_name_chars_strict \
|
||||
-Wproperty_name_chars_strict
|
||||
-Wproperty_name_chars_strict \
|
||||
-Winterrupt_provider
|
||||
endif
|
||||
|
||||
DTC_FLAGS += $(DTC_FLAGS_$(basetarget))
|
||||
|
@@ -58,6 +58,21 @@ cat << EOF
|
||||
EOF
|
||||
}
|
||||
|
||||
gen_proto_order_variant()
|
||||
{
|
||||
local meta="$1"; shift
|
||||
local pfx="$1"; shift
|
||||
local name="$1"; shift
|
||||
local sfx="$1"; shift
|
||||
local order="$1"; shift
|
||||
local arch="$1"
|
||||
local atomic="$2"
|
||||
|
||||
local basename="${arch}${atomic}_${pfx}${name}${sfx}"
|
||||
|
||||
printf "#define arch_${basename}${order} ${basename}${order}\n"
|
||||
}
|
||||
|
||||
#gen_proto_order_variants(meta, pfx, name, sfx, arch, atomic, int, args...)
|
||||
gen_proto_order_variants()
|
||||
{
|
||||
@@ -72,6 +87,22 @@ gen_proto_order_variants()
|
||||
|
||||
local template="$(find_fallback_template "${pfx}" "${name}" "${sfx}" "${order}")"
|
||||
|
||||
if [ -z "$arch" ]; then
|
||||
gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "" "$@"
|
||||
|
||||
if meta_has_acquire "${meta}"; then
|
||||
gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_acquire" "$@"
|
||||
fi
|
||||
if meta_has_release "${meta}"; then
|
||||
gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_release" "$@"
|
||||
fi
|
||||
if meta_has_relaxed "${meta}"; then
|
||||
gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_relaxed" "$@"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# If we don't have relaxed atomics, then we don't bother with ordering fallbacks
|
||||
# read_acquire and set_release need to be templated, though
|
||||
if ! meta_has_relaxed "${meta}"; then
|
||||
|
@@ -1022,6 +1022,9 @@ static void check_i2c_bus_bridge(struct check *c, struct dt_info *dti, struct no
|
||||
}
|
||||
WARNING(i2c_bus_bridge, check_i2c_bus_bridge, NULL, &addr_size_cells);
|
||||
|
||||
#define I2C_OWN_SLAVE_ADDRESS (1U << 30)
|
||||
#define I2C_TEN_BIT_ADDRESS (1U << 31)
|
||||
|
||||
static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
|
||||
{
|
||||
struct property *prop;
|
||||
@@ -1044,6 +1047,8 @@ static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node
|
||||
}
|
||||
|
||||
reg = fdt32_to_cpu(*cells);
|
||||
/* Ignore I2C_OWN_SLAVE_ADDRESS */
|
||||
reg &= ~I2C_OWN_SLAVE_ADDRESS;
|
||||
snprintf(unit_addr, sizeof(unit_addr), "%x", reg);
|
||||
if (!streq(unitname, unit_addr))
|
||||
FAIL(c, dti, node, "I2C bus unit address format error, expected \"%s\"",
|
||||
@@ -1051,10 +1056,15 @@ static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node
|
||||
|
||||
for (len = prop->val.len; len > 0; len -= 4) {
|
||||
reg = fdt32_to_cpu(*(cells++));
|
||||
if (reg > 0x3ff)
|
||||
/* Ignore I2C_OWN_SLAVE_ADDRESS */
|
||||
reg &= ~I2C_OWN_SLAVE_ADDRESS;
|
||||
|
||||
if ((reg & I2C_TEN_BIT_ADDRESS) && ((reg & ~I2C_TEN_BIT_ADDRESS) > 0x3ff))
|
||||
FAIL_PROP(c, dti, node, prop, "I2C address must be less than 10-bits, got \"0x%x\"",
|
||||
reg);
|
||||
|
||||
else if (reg > 0x7f)
|
||||
FAIL_PROP(c, dti, node, prop, "I2C address must be less than 7-bits, got \"0x%x\". Set I2C_TEN_BIT_ADDRESS for 10 bit addresses or fix the property",
|
||||
reg);
|
||||
}
|
||||
}
|
||||
WARNING(i2c_bus_reg, check_i2c_bus_reg, NULL, ®_format, &i2c_bus_bridge);
|
||||
@@ -1547,6 +1557,28 @@ static bool node_is_interrupt_provider(struct node *node)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void check_interrupt_provider(struct check *c,
|
||||
struct dt_info *dti,
|
||||
struct node *node)
|
||||
{
|
||||
struct property *prop;
|
||||
|
||||
if (!node_is_interrupt_provider(node))
|
||||
return;
|
||||
|
||||
prop = get_property(node, "#interrupt-cells");
|
||||
if (!prop)
|
||||
FAIL(c, dti, node,
|
||||
"Missing #interrupt-cells in interrupt provider");
|
||||
|
||||
prop = get_property(node, "#address-cells");
|
||||
if (!prop)
|
||||
FAIL(c, dti, node,
|
||||
"Missing #address-cells in interrupt provider");
|
||||
}
|
||||
WARNING(interrupt_provider, check_interrupt_provider, NULL);
|
||||
|
||||
static void check_interrupts_property(struct check *c,
|
||||
struct dt_info *dti,
|
||||
struct node *node)
|
||||
@@ -1604,7 +1636,7 @@ static void check_interrupts_property(struct check *c,
|
||||
|
||||
prop = get_property(irq_node, "#interrupt-cells");
|
||||
if (!prop) {
|
||||
FAIL(c, dti, irq_node, "Missing #interrupt-cells in interrupt-parent");
|
||||
/* We warn about that already in another test. */
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1828,6 +1860,7 @@ static struct check *check_table[] = {
|
||||
&deprecated_gpio_property,
|
||||
&gpios_property,
|
||||
&interrupts_property,
|
||||
&interrupt_provider,
|
||||
|
||||
&alias_paths,
|
||||
|
||||
|
@@ -51,6 +51,37 @@ extern int annotate; /* annotate .dts with input source location */
|
||||
|
||||
typedef uint32_t cell_t;
|
||||
|
||||
static inline uint16_t dtb_ld16(const void *p)
|
||||
{
|
||||
const uint8_t *bp = (const uint8_t *)p;
|
||||
|
||||
return ((uint16_t)bp[0] << 8)
|
||||
| bp[1];
|
||||
}
|
||||
|
||||
static inline uint32_t dtb_ld32(const void *p)
|
||||
{
|
||||
const uint8_t *bp = (const uint8_t *)p;
|
||||
|
||||
return ((uint32_t)bp[0] << 24)
|
||||
| ((uint32_t)bp[1] << 16)
|
||||
| ((uint32_t)bp[2] << 8)
|
||||
| bp[3];
|
||||
}
|
||||
|
||||
static inline uint64_t dtb_ld64(const void *p)
|
||||
{
|
||||
const uint8_t *bp = (const uint8_t *)p;
|
||||
|
||||
return ((uint64_t)bp[0] << 56)
|
||||
| ((uint64_t)bp[1] << 48)
|
||||
| ((uint64_t)bp[2] << 40)
|
||||
| ((uint64_t)bp[3] << 32)
|
||||
| ((uint64_t)bp[4] << 24)
|
||||
| ((uint64_t)bp[5] << 16)
|
||||
| ((uint64_t)bp[6] << 8)
|
||||
| bp[7];
|
||||
}
|
||||
|
||||
#define streq(a, b) (strcmp((a), (b)) == 0)
|
||||
#define strstarts(s, prefix) (strncmp((s), (prefix), strlen(prefix)) == 0)
|
||||
|
@@ -156,7 +156,7 @@ static void asm_emit_data(void *e, struct data d)
|
||||
emit_offset_label(f, m->ref, m->offset);
|
||||
|
||||
while ((d.len - off) >= sizeof(uint32_t)) {
|
||||
asm_emit_cell(e, fdt32_to_cpu(*((fdt32_t *)(d.val+off))));
|
||||
asm_emit_cell(e, dtb_ld32(d.val + off));
|
||||
off += sizeof(uint32_t);
|
||||
}
|
||||
|
||||
|
@@ -436,7 +436,7 @@ int fdt_open_into(const void *fdt, void *buf, int bufsize)
|
||||
return struct_size;
|
||||
}
|
||||
|
||||
if (can_assume(LIBFDT_ORDER) |
|
||||
if (can_assume(LIBFDT_ORDER) ||
|
||||
!fdt_blocks_misordered_(fdt, mem_rsv_size, struct_size)) {
|
||||
/* no further work necessary */
|
||||
err = fdt_move(fdt, buf, bufsize);
|
||||
|
@@ -32,7 +32,7 @@ static int fdt_sw_probe_(void *fdt)
|
||||
/* 'memrsv' state: Initial state after fdt_create()
|
||||
*
|
||||
* Allowed functions:
|
||||
* fdt_add_reservmap_entry()
|
||||
* fdt_add_reservemap_entry()
|
||||
* fdt_finish_reservemap() [moves to 'struct' state]
|
||||
*/
|
||||
static int fdt_sw_probe_memrsv_(void *fdt)
|
||||
|
@@ -9,6 +9,10 @@
|
||||
#include "libfdt_env.h"
|
||||
#include "fdt.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FDT_FIRST_SUPPORTED_VERSION 0x02
|
||||
#define FDT_LAST_SUPPORTED_VERSION 0x11
|
||||
|
||||
@@ -2069,4 +2073,8 @@ int fdt_overlay_apply(void *fdt, void *fdto);
|
||||
|
||||
const char *fdt_strerror(int errval);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LIBFDT_H */
|
||||
|
@@ -110,13 +110,13 @@ static void write_propval_int(FILE *f, const char *p, size_t len, size_t width)
|
||||
fprintf(f, "%02"PRIx8, *(const uint8_t*)p);
|
||||
break;
|
||||
case 2:
|
||||
fprintf(f, "0x%02"PRIx16, fdt16_to_cpu(*(const fdt16_t*)p));
|
||||
fprintf(f, "0x%02"PRIx16, dtb_ld16(p));
|
||||
break;
|
||||
case 4:
|
||||
fprintf(f, "0x%02"PRIx32, fdt32_to_cpu(*(const fdt32_t*)p));
|
||||
fprintf(f, "0x%02"PRIx32, dtb_ld32(p));
|
||||
break;
|
||||
case 8:
|
||||
fprintf(f, "0x%02"PRIx64, fdt64_to_cpu(*(const fdt64_t*)p));
|
||||
fprintf(f, "0x%02"PRIx64, dtb_ld64(p));
|
||||
break;
|
||||
}
|
||||
if (p + width < end)
|
||||
@@ -183,7 +183,7 @@ static enum markertype guess_value_type(struct property *prop)
|
||||
nnotcelllbl++;
|
||||
}
|
||||
|
||||
if ((p[len-1] == '\0') && (nnotstring == 0) && (nnul < (len-nnul))
|
||||
if ((p[len-1] == '\0') && (nnotstring == 0) && (nnul <= (len-nnul))
|
||||
&& (nnotstringlbl == 0)) {
|
||||
return TYPE_STRING;
|
||||
} else if (((len % sizeof(cell_t)) == 0) && (nnotcelllbl == 0)) {
|
||||
|
@@ -1 +1 @@
|
||||
#define DTC_VERSION "DTC 1.6.0-g87a656ae"
|
||||
#define DTC_VERSION "DTC 1.6.0-g9d7888cb"
|
||||
|
@@ -59,10 +59,10 @@ static void yaml_propval_int(yaml_emitter_t *emitter, struct marker *markers, ch
|
||||
sprintf(buf, "0x%"PRIx8, *(uint8_t*)(data + off));
|
||||
break;
|
||||
case 2:
|
||||
sprintf(buf, "0x%"PRIx16, fdt16_to_cpu(*(fdt16_t*)(data + off)));
|
||||
sprintf(buf, "0x%"PRIx16, dtb_ld16(data + off));
|
||||
break;
|
||||
case 4:
|
||||
sprintf(buf, "0x%"PRIx32, fdt32_to_cpu(*(fdt32_t*)(data + off)));
|
||||
sprintf(buf, "0x%"PRIx32, dtb_ld32(data + off));
|
||||
m = markers;
|
||||
is_phandle = false;
|
||||
for_each_marker_of_type(m, REF_PHANDLE) {
|
||||
@@ -73,7 +73,7 @@ static void yaml_propval_int(yaml_emitter_t *emitter, struct marker *markers, ch
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
sprintf(buf, "0x%"PRIx64, fdt64_to_cpu(*(fdt64_t*)(data + off)));
|
||||
sprintf(buf, "0x%"PRIx64, dtb_ld64(data + off));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@@ -78,7 +78,7 @@ config GCC_PLUGIN_RANDSTRUCT
|
||||
source tree isn't cleaned after kernel installation).
|
||||
|
||||
The seed used for compilation is located at
|
||||
scripts/gcc-plgins/randomize_layout_seed.h. It remains after
|
||||
scripts/gcc-plugins/randomize_layout_seed.h. It remains after
|
||||
a make clean to allow for external modules to be compiled with
|
||||
the existing seed and will be removed by a make mrproper or
|
||||
make distclean.
|
||||
|
@@ -4,27 +4,19 @@
|
||||
* Copyright (C) 2015 Boris Barbulovski <bbarbulovski@gmail.com>
|
||||
*/
|
||||
|
||||
#include <qglobal.h>
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QList>
|
||||
#include <qtextbrowser.h>
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QCloseEvent>
|
||||
#include <QDebug>
|
||||
#include <QDesktopWidget>
|
||||
#include <QFileDialog>
|
||||
#include <QLabel>
|
||||
#include <QLayout>
|
||||
#include <QList>
|
||||
#include <QMenu>
|
||||
|
||||
#include <qapplication.h>
|
||||
#include <qdesktopwidget.h>
|
||||
#include <qtoolbar.h>
|
||||
#include <qlayout.h>
|
||||
#include <qsplitter.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qlabel.h>
|
||||
#include <qpushbutton.h>
|
||||
#include <qmenubar.h>
|
||||
#include <qmessagebox.h>
|
||||
#include <qregexp.h>
|
||||
#include <qevent.h>
|
||||
#include <QMenuBar>
|
||||
#include <QMessageBox>
|
||||
#include <QToolBar>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -445,9 +437,10 @@ void ConfigList::updateList(ConfigItem* item)
|
||||
if (rootEntry != &rootmenu && (mode == singleMode ||
|
||||
(mode == symbolMode && rootEntry->parent != &rootmenu))) {
|
||||
item = (ConfigItem *)topLevelItem(0);
|
||||
if (!item)
|
||||
if (!item && mode != symbolMode) {
|
||||
item = new ConfigItem(this, 0, true);
|
||||
last = item;
|
||||
last = item;
|
||||
}
|
||||
}
|
||||
if ((mode == singleMode || (mode == symbolMode && !(rootEntry->flags & MENU_ROOT))) &&
|
||||
rootEntry->sym && rootEntry->prompt) {
|
||||
@@ -545,7 +538,7 @@ void ConfigList::setRootMenu(struct menu *menu)
|
||||
rootEntry = menu;
|
||||
updateListAll();
|
||||
if (currentItem()) {
|
||||
currentItem()->setSelected(hasFocus());
|
||||
setSelected(currentItem(), hasFocus());
|
||||
scrollToItem(currentItem());
|
||||
}
|
||||
}
|
||||
@@ -873,7 +866,7 @@ void ConfigList::focusInEvent(QFocusEvent *e)
|
||||
|
||||
ConfigItem* item = (ConfigItem *)currentItem();
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
setSelected(item, true);
|
||||
menu = item->menu;
|
||||
}
|
||||
emit gotFocus(menu);
|
||||
@@ -1021,7 +1014,7 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
|
||||
: Parent(parent), sym(0), _menu(0)
|
||||
{
|
||||
setObjectName(name);
|
||||
|
||||
setOpenLinks(false);
|
||||
|
||||
if (!objectName().isEmpty()) {
|
||||
configSettings->beginGroup(objectName());
|
||||
@@ -1094,7 +1087,7 @@ void ConfigInfoView::menuInfo(void)
|
||||
if (sym->name) {
|
||||
head += " (";
|
||||
if (showDebug())
|
||||
head += QString().sprintf("<a href=\"s%p\">", sym);
|
||||
head += QString().sprintf("<a href=\"s%s\">", sym->name);
|
||||
head += print_filter(sym->name);
|
||||
if (showDebug())
|
||||
head += "</a>";
|
||||
@@ -1103,7 +1096,7 @@ void ConfigInfoView::menuInfo(void)
|
||||
} else if (sym->name) {
|
||||
head += "<big><b>";
|
||||
if (showDebug())
|
||||
head += QString().sprintf("<a href=\"s%p\">", sym);
|
||||
head += QString().sprintf("<a href=\"s%s\">", sym->name);
|
||||
head += print_filter(sym->name);
|
||||
if (showDebug())
|
||||
head += "</a>";
|
||||
@@ -1154,13 +1147,16 @@ QString ConfigInfoView::debug_info(struct symbol *sym)
|
||||
switch (prop->type) {
|
||||
case P_PROMPT:
|
||||
case P_MENU:
|
||||
debug += QString().sprintf("prompt: <a href=\"m%p\">", prop->menu);
|
||||
debug += QString().sprintf("prompt: <a href=\"m%s\">", sym->name);
|
||||
debug += print_filter(prop->text);
|
||||
debug += "</a><br>";
|
||||
break;
|
||||
case P_DEFAULT:
|
||||
case P_SELECT:
|
||||
case P_RANGE:
|
||||
case P_COMMENT:
|
||||
case P_IMPLY:
|
||||
case P_SYMBOL:
|
||||
debug += prop_get_type_name(prop->type);
|
||||
debug += ": ";
|
||||
expr_print(prop->expr, expr_print_help, &debug, E_NONE);
|
||||
@@ -1226,13 +1222,62 @@ void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char
|
||||
QString str2 = print_filter(str);
|
||||
|
||||
if (sym && sym->name && !(sym->flags & SYMBOL_CONST)) {
|
||||
*text += QString().sprintf("<a href=\"s%p\">", sym);
|
||||
*text += QString().sprintf("<a href=\"s%s\">", sym->name);
|
||||
*text += str2;
|
||||
*text += "</a>";
|
||||
} else
|
||||
*text += str2;
|
||||
}
|
||||
|
||||
void ConfigInfoView::clicked(const QUrl &url)
|
||||
{
|
||||
QByteArray str = url.toEncoded();
|
||||
const std::size_t count = str.size();
|
||||
char *data = new char[count + 1];
|
||||
struct symbol **result;
|
||||
struct menu *m = NULL;
|
||||
|
||||
if (count < 1) {
|
||||
qInfo() << "Clicked link is empty";
|
||||
delete data;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(data, str.constData(), count);
|
||||
data[count] = '\0';
|
||||
|
||||
/* Seek for exact match */
|
||||
data[0] = '^';
|
||||
strcat(data, "$");
|
||||
result = sym_re_search(data);
|
||||
if (!result) {
|
||||
qInfo() << "Clicked symbol is invalid:" << data;
|
||||
delete data;
|
||||
return;
|
||||
}
|
||||
|
||||
sym = *result;
|
||||
|
||||
/* Seek for the menu which holds the symbol */
|
||||
for (struct property *prop = sym->prop; prop; prop = prop->next) {
|
||||
if (prop->type != P_PROMPT && prop->type != P_MENU)
|
||||
continue;
|
||||
m = prop->menu;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!m) {
|
||||
/* Symbol is not visible as a menu */
|
||||
symbolInfo();
|
||||
emit showDebugChanged(true);
|
||||
} else {
|
||||
emit menuSelected(m);
|
||||
}
|
||||
|
||||
free(result);
|
||||
delete data;
|
||||
}
|
||||
|
||||
QMenu* ConfigInfoView::createStandardContextMenu(const QPoint & pos)
|
||||
{
|
||||
QMenu* popup = Parent::createStandardContextMenu(pos);
|
||||
@@ -1402,18 +1447,22 @@ ConfigMainWindow::ConfigMainWindow(void)
|
||||
addToolBar(toolBar);
|
||||
|
||||
backAction = new QAction(QPixmap(xpm_back), "Back", this);
|
||||
connect(backAction, SIGNAL(triggered(bool)), SLOT(goBack()));
|
||||
backAction->setEnabled(false);
|
||||
connect(backAction, SIGNAL(triggered(bool)), SLOT(goBack()));
|
||||
|
||||
QAction *quitAction = new QAction("&Quit", this);
|
||||
quitAction->setShortcut(Qt::CTRL + Qt::Key_Q);
|
||||
connect(quitAction, SIGNAL(triggered(bool)), SLOT(close()));
|
||||
connect(quitAction, SIGNAL(triggered(bool)), SLOT(close()));
|
||||
|
||||
QAction *loadAction = new QAction(QPixmap(xpm_load), "&Load", this);
|
||||
loadAction->setShortcut(Qt::CTRL + Qt::Key_L);
|
||||
connect(loadAction, SIGNAL(triggered(bool)), SLOT(loadConfig()));
|
||||
connect(loadAction, SIGNAL(triggered(bool)), SLOT(loadConfig()));
|
||||
|
||||
saveAction = new QAction(QPixmap(xpm_save), "&Save", this);
|
||||
saveAction->setShortcut(Qt::CTRL + Qt::Key_S);
|
||||
connect(saveAction, SIGNAL(triggered(bool)), SLOT(saveConfig()));
|
||||
connect(saveAction, SIGNAL(triggered(bool)), SLOT(saveConfig()));
|
||||
|
||||
conf_set_changed_callback(conf_changed);
|
||||
|
||||
// Set saveAction's initial state
|
||||
conf_changed();
|
||||
configname = xstrdup(conf_get_configname());
|
||||
@@ -1506,6 +1555,9 @@ ConfigMainWindow::ConfigMainWindow(void)
|
||||
helpMenu->addAction(showIntroAction);
|
||||
helpMenu->addAction(showAboutAction);
|
||||
|
||||
connect (helpText, SIGNAL (anchorClicked (const QUrl &)),
|
||||
helpText, SLOT (clicked (const QUrl &)) );
|
||||
|
||||
connect(configList, SIGNAL(menuChanged(struct menu *)),
|
||||
helpText, SLOT(setInfo(struct menu *)));
|
||||
connect(configList, SIGNAL(menuSelected(struct menu *)),
|
||||
@@ -1611,21 +1663,11 @@ void ConfigMainWindow::searchConfig(void)
|
||||
void ConfigMainWindow::changeItens(struct menu *menu)
|
||||
{
|
||||
configList->setRootMenu(menu);
|
||||
|
||||
if (configList->rootEntry->parent == &rootmenu)
|
||||
backAction->setEnabled(false);
|
||||
else
|
||||
backAction->setEnabled(true);
|
||||
}
|
||||
|
||||
void ConfigMainWindow::changeMenu(struct menu *menu)
|
||||
{
|
||||
menuList->setRootMenu(menu);
|
||||
|
||||
if (menuList->rootEntry->parent == &rootmenu)
|
||||
backAction->setEnabled(false);
|
||||
else
|
||||
backAction->setEnabled(true);
|
||||
}
|
||||
|
||||
void ConfigMainWindow::setMenuLink(struct menu *menu)
|
||||
@@ -1645,22 +1687,26 @@ void ConfigMainWindow::setMenuLink(struct menu *menu)
|
||||
return;
|
||||
list->setRootMenu(parent);
|
||||
break;
|
||||
case symbolMode:
|
||||
case menuMode:
|
||||
if (menu->flags & MENU_ROOT) {
|
||||
configList->setRootMenu(menu);
|
||||
menuList->setRootMenu(menu);
|
||||
configList->clearSelection();
|
||||
list = menuList;
|
||||
} else {
|
||||
list = configList;
|
||||
} else {
|
||||
parent = menu_get_parent_menu(menu->parent);
|
||||
if (!parent)
|
||||
return;
|
||||
item = menuList->findConfigItem(parent);
|
||||
|
||||
/* Select the config view */
|
||||
item = configList->findConfigItem(parent);
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
menuList->scrollToItem(item);
|
||||
configList->setSelected(item, true);
|
||||
configList->scrollToItem(item);
|
||||
}
|
||||
list->setRootMenu(parent);
|
||||
|
||||
menuList->setRootMenu(parent);
|
||||
menuList->clearSelection();
|
||||
list = menuList;
|
||||
}
|
||||
break;
|
||||
case fullMode:
|
||||
@@ -1673,9 +1719,10 @@ void ConfigMainWindow::setMenuLink(struct menu *menu)
|
||||
if (list) {
|
||||
item = list->findConfigItem(menu);
|
||||
if (item) {
|
||||
item->setSelected(true);
|
||||
list->setSelected(item, true);
|
||||
list->scrollToItem(item);
|
||||
list->setFocus();
|
||||
helpText->setInfo(menu);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1688,25 +1735,11 @@ void ConfigMainWindow::listFocusChanged(void)
|
||||
|
||||
void ConfigMainWindow::goBack(void)
|
||||
{
|
||||
ConfigItem* item, *oldSelection;
|
||||
|
||||
configList->setParentMenu();
|
||||
qInfo() << __FUNCTION__;
|
||||
if (configList->rootEntry == &rootmenu)
|
||||
backAction->setEnabled(false);
|
||||
|
||||
if (menuList->selectedItems().count() == 0)
|
||||
return;
|
||||
|
||||
item = (ConfigItem*)menuList->selectedItems().first();
|
||||
oldSelection = item;
|
||||
while (item) {
|
||||
if (item->menu == configList->rootEntry) {
|
||||
oldSelection->setSelected(false);
|
||||
item->setSelected(true);
|
||||
break;
|
||||
}
|
||||
item = (ConfigItem*)item->parent();
|
||||
}
|
||||
configList->setParentMenu();
|
||||
}
|
||||
|
||||
void ConfigMainWindow::showSingleView(void)
|
||||
@@ -1718,6 +1751,8 @@ void ConfigMainWindow::showSingleView(void)
|
||||
fullViewAction->setEnabled(true);
|
||||
fullViewAction->setChecked(false);
|
||||
|
||||
backAction->setEnabled(true);
|
||||
|
||||
menuView->hide();
|
||||
menuList->setRootMenu(0);
|
||||
configList->mode = singleMode;
|
||||
@@ -1737,6 +1772,8 @@ void ConfigMainWindow::showSplitView(void)
|
||||
fullViewAction->setEnabled(true);
|
||||
fullViewAction->setChecked(false);
|
||||
|
||||
backAction->setEnabled(false);
|
||||
|
||||
configList->mode = menuMode;
|
||||
if (configList->rootEntry == &rootmenu)
|
||||
configList->updateListAll();
|
||||
@@ -1760,6 +1797,8 @@ void ConfigMainWindow::showFullView(void)
|
||||
fullViewAction->setEnabled(false);
|
||||
fullViewAction->setChecked(true);
|
||||
|
||||
backAction->setEnabled(false);
|
||||
|
||||
menuView->hide();
|
||||
menuList->setRootMenu(0);
|
||||
configList->mode = fullMode;
|
||||
|
@@ -3,17 +3,17 @@
|
||||
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
|
||||
*/
|
||||
|
||||
#include <QTextBrowser>
|
||||
#include <QTreeWidget>
|
||||
#include <QMainWindow>
|
||||
#include <QHeaderView>
|
||||
#include <qsettings.h>
|
||||
#include <QPushButton>
|
||||
#include <QSettings>
|
||||
#include <QLineEdit>
|
||||
#include <QSplitter>
|
||||
#include <QCheckBox>
|
||||
#include <QDialog>
|
||||
#include <QHeaderView>
|
||||
#include <QLineEdit>
|
||||
#include <QMainWindow>
|
||||
#include <QPushButton>
|
||||
#include <QSettings>
|
||||
#include <QSplitter>
|
||||
#include <QTextBrowser>
|
||||
#include <QTreeWidget>
|
||||
|
||||
#include "expr.h"
|
||||
|
||||
class ConfigView;
|
||||
@@ -45,11 +45,17 @@ class ConfigList : public QTreeWidget {
|
||||
public:
|
||||
ConfigList(ConfigView* p, const char *name = 0);
|
||||
void reinit(void);
|
||||
ConfigItem* findConfigItem(struct menu *);
|
||||
ConfigView* parent(void) const
|
||||
{
|
||||
return (ConfigView*)Parent::parent();
|
||||
}
|
||||
ConfigItem* findConfigItem(struct menu *);
|
||||
void setSelected(QTreeWidgetItem *item, bool enable) {
|
||||
for (int i = 0; i < selectedItems().size(); i++)
|
||||
selectedItems().at(i)->setSelected(false);
|
||||
|
||||
item->setSelected(enable);
|
||||
}
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *e);
|
||||
@@ -250,6 +256,7 @@ public slots:
|
||||
void setInfo(struct menu *menu);
|
||||
void saveSettings(void);
|
||||
void setShowDebug(bool);
|
||||
void clicked (const QUrl &url);
|
||||
|
||||
signals:
|
||||
void showDebugChanged(bool);
|
||||
|
Reference in New Issue
Block a user